Таблица значений — это не сохраняемый в базе данных объект, предназначенный для создания динамических наборов данных.
Таблица значений состоит из строк и колонок. В отличие от списка значений, таблица значений имеет структуру, которую определяет разработчик.
Объект ТаблицаЗначений имеет много полезных методов для обработки данных. Разработчик средствами встроенного языка может добавлять и удалять строки и колонки, перебирать строки, искать значение, сортировать по любым колонкам и выполнять другие операции.
При создании новой таблицы значений в нее обычно добавляются колонки:
| 1 2 3 4 5 | тзТовары = Новый ТаблицаЗначений; тзТовары.Колонки.Добавить("Ссылка"); тзТовары.Колонки.Добавить("Наименование"); тзТовары.Колонки.Добавить("Цена"); тзТовары.Колонки.Добавить("Количество"); | 
У таблицы значений есть свойство Колонки, которое представляет собой коллекцию колонок и позволяет добавлять, удалять и менять их порядок.
По умолчанию в таблице значений могут храниться значения разных типов. Но в 1С:Предприятии 8.0 для колонки можно задать список возможных типов значений. Это делается следующим образом (для повышения наглядности нам понадобится вспомогательная функция СоздатьОписаниеТипов):
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Функция СоздатьОписаниеТипов(НазваниеТипа,Длина,Точность="")  мас = Новый Массив;  мас.Добавить(Тип(НазваниеТипа));  Если Точность = "" Тогда  КвалифСтроки = Новый КвалификаторыСтроки(Длина,  ДопустимаяДлина.переменная)  Иначе  КвалифЧисла = Новый КвалификаторыЧисла(ДопустимыйЗнак.Любой,  Длина,Точность);  КонецЕсли;  Возврат Новый ОписаниеТипов(мас, квалифСтроки, КвалифЧисла); КонецФункции тзТовары = Новый ТаблицаЗначений; ТипКолСсылка = СоздатьОписаниеТипов("СправочникСписок.Номенклатура"); тзТовары.Колонки.Добавить("Ссылка", ТипКолСсылка,"Товар",5); ТипКолНаим = СоздатьОписаниеТипов("Строка",50); тзТовары.Колонки.Добавить("Наименование", ТипКолНаим); ТипКолЦена = СоздатьОписаниеТипов("Строка",15,2); тзТовары.Колонки.Добавить("Цена", ТипКолЦена, "Цена",15); ТипКолКолич = СоздатьОписаниеТипов("Строка",15,4); тзТовары.Колонки.Добавить("Количество",ТипКолКолич,"Кол-во",15); | 
| 1 2 3 4 5 6 7 8 9 | //удаляем все строки из таблицы (колонки остаются) тзТовары.Очистить(); СпрВыборка = Справочники.Номенклатура.Выбрать(); Пока СпрВыборка.Следующий() Цикл  НовСтрока = тзТовары.Добавить();  НовСтрока.Ссылка = СпрВыборка.Ссылка;  НовСтрока.Наименование = СпрВыборка.Наименование;  НовСтрока.Цена = СпрВыборка.Цена; КонецЦикла; | 
| 1 2 3 4 5 6 | тзТовары.Колонки.Очистить(); По индексу можно удалить строку: тзТовары.Удалить(0); //удалить 1-ю строку с индексом 0 тзТовары.Удалить(1); //удалить 2-ю строку с индексом 1 | 
| 1 2 3 4 | Для Каждого стр Из тзТовары Цикл  Сообщить(стр.Наименование);  Сообщить(стр.Цена); КонецЦикла; | 
| 1 2 3 4 | Для н=0 По тзТовары.Количество()-1 Цикл  Сообщить(тзТоаары[н].Наименование);  Сообщить(тзТовары[н].Цена) ; КонецЦикла; | 
| 1 2 3 4 | НайденнаяСтрока = тзТовары.Найти(100,"Цена"); Если НайденнаяСтрока = Неопределено Тогда  Сообщить("Товар с такой ценой найден! " + НайденнаяСтрока.Наименование); КонецЕсли; | 
| 1 2 3 | Отбор = Новый Структура("Цена",100); МассивСтрок = тзТовары.НайтиСтроки(Отбор); Сообщить("Найдено " + МассивСтрок.Количество() + " товаров с такой ценой"); | 
Внимание! Массив, возвращаемый методом НайтиСтроки, содержит строки таблицы значений (не их копии, а сами строки).При изменении какой-либо строки в таблице значений это отразится в массиве, и наоборот.
Таблица значений позволяет упорядочить содержащиеся в ней данные, для чего предназначен метод Сортировать:
| 1 2 3 | тзТовары.Сортировать("Наименование Возр"); тзТовары.Сортировать("Цена Убыв"); тзТовары.Сортировать("Цена Убыв, Наименование Возр"); | 
Таблица значений имеет очень полезную возможность группировки строк и подсчета итогов по группе, что реализуется методом Свернуть, имеющим следующие параметры:
Свернуть(<Колонки группировок>, <Колонки суммирования>)
Этот метод осуществляет свертку таблицы значений по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения по этим строкам, хранящиеся в колонках, указанных во втором параметре, суммируются.
Внимание! Списки колонок для метода Свернуть не должны пересекаться. Колонки, не вошедшие ни в один из списков колонок, после выполнения метода удаляются из таблицы значений. Например, у нас есть таблица значений со следующими данными.
В следующем примере эта таблица сворачивается по колонкам Сотрудник и Год с подсчетом суммы по колонке Доход:
| 1 2 | //подсчитаем годовой доход по каждому сотруднику тзДоходыСотр.Свернуть("Сотрудник,Год","Доход"); | 
| 1 2 | МаДоходыПоГодам = тзДоходыСотр.Скопировать(); МаДоходыПоГодам.Свернуть("Сотрудник,Год","Доход"); | 
Таблица значений позволяет подсчитать итог по колонке числового типа, например:
| 1 2 | ВсегоДоход = тзДоходыСотр.Итог("Доход"); ВсегоНДС = тзСостав.Итог("НДС"); | 
И последнее, о чем хотелось рассказать, из таблицы значений можно выгрузить целую колонку в массив и загрузить ее из массива:
| 1 2 | МассивЦен = тзТовары.ВыгрузитьКолонку ("Цена") ; тзТовары.ЗагрузитьКолонку("Количество",МассивОстаткиТоваров); | 
Если Вы хотите больше узнать о программировании в 1С, тогда регистрируйтесь на курс: 1С 8.3 Старт >>>
 
