Меню

1с таблица значений заполнитьзначения

Эта универсальная таблица значений

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

И только таблица значений:

  • Способна напрямую заполнять табличные части документов, справочников и обработок;
  • Является результатом выполнения запроса;
  • Легко читается и наглядно формируется;
  • и многое, многое другое.

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

Из чего состоят таблицы значений

Все начинающие разработчики четко знают, что у таблицы значений есть:

  1. Колонки, описывающие структуру таблицы;
  2. Строки, наполняющие таблицу информацией.

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

Но обо всем по порядку.

На Рис.1 показано, как выглядит таблица значений, выведенная на печать простейшей процедурой, которая показывает их структуру и наполнение.

Как видно из примера, колонок у таблицы 5, не считая номера строки по порядку.

В большинстве случаев нет необходимости указывать тип данных колонки и её ширину, достаточно определить наименование столбца, но в некоторых случаях без этого просто не обойтись (допустим, при выгрузке таблицы в файл формата dbf).

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

Добавление строки происходит методом Добавить(), с присвоением имени новой строки.

Индексы таблицы значений

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

  • Найти (возвращает первый найденный элемент по определенным параметрам, в противном случае значение Неопределено);
  • НайтиСтроки (возвращает массив строк таблицы, удовлетворяющих определенным условиям).

Поиск по большим таблицам сильно «подвешивает» систему и может быть продолжителен по времени. Именно в этих случаях и надо использовать индексы.

В первом случае поиск происходит по одному значению и одной колонке, именно её и надо передавать в индексы (Рис.3)

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

В случае, приведенном на примере, вторая строка указывает на одновременный поиск строк, содержащих определенное значение Номенклатуры и ее характеристики, а третьей строкой указано, что к параметрам поиска может быть добавлен документ «Заказ на производство».

Копирование, выгрузка, загрузка и очистка ТЗ

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

Здесь на помощь снова приходит таблица значений. В ТЗ, воспользовавшись методом табличных частей Выгрузить() можно:

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

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

Следует отметить, что сопоставление колонок табличной части и ТЗ происходит по именам.

Полностью скопировать одну ТЗ в другую, а также определить, какие строки и колонки будут перенесены можно методом Скопировать().

Когда необходимо сохранить только структуру таблицы, можно воспользоваться кодом (Рис.4)

При этом будут сохранены колонки таблицы, а информация и строки из дубликата будут удалены.

Таблица значений и запрос

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

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

Заменив «*» на наименование колонок (строку вида ТЗ.Номенклатура) можно уменьшить объем выгружаемой информации.

Ошибка при выполнении запроса (Рис.5) «Тип не может быть обработан в запросе», говорит о том, что разработчик забыл выполнить часть кода Рис.2 и не типизировал колонки.

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

При переборе строк таблицы значений методом содержащим счетчик (Рис. 6) , важно помнить, что начальное значение индекса строк – 0, а конечное значение итератора должно быть на 1 меньше количества строк в таблице. В противном случае есть 100% вероятность возникновения ошибки «Значение индекса выходит за границы диапазона»

Вообще же, перебор строк ТЗ лучше осуществлять через конструкцию «Для каждго … из», определив имя итератора.

Источник



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

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

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

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

При создании новой таблицы значений в нее обычно добавляются колонки:

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

Читайте также:  Николай алмазов вера алмазова таблица

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

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

Чтобы удалить колонки из таблицы значений нужно применить метод Очистить для свойства-коллекции Колонки:

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

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

Часто возникает необходимость найти значение в таблице значений. Для решения этой задачи предназначены методы Найти и НайтиСтроки. В метод Найти передается искомое значение и список колонок, которые нужно просматривать. Если значение найдено, то возвращается строка таблицы значений, иначе — значение Неопределено.

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

Внимание! Массив, возвращаемый методом НайтиСтроки, содержит строки таблицы значений (не их копии, а сами строки).При изменении какой-либо строки в таблице значений это отразится в массиве, и наоборот.

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

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

Этот метод осуществляет свертку таблицы значений по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения по этим строкам, хранящиеся в колонках, указанных во втором параметре, суммируются.

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

В следующем примере эта таблица сворачивается по колонкам Сотрудник и Год с подсчетом суммы по колонке Доход:

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

Продолжение статьи доступно только зарегистрированным пользователям!

Если Вы хотите больше узнать о программировании в 1С, тогда регистрируйтесь на курс: 1С 8.3 Старт >>>

Источник

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

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

Как можно создать новую таблицу значений?

Как добавить новую колонку с определенным типом и заголовком?

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

Как добавить новые строки?

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

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

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

  • ПараметрыОтбора (обязательный, тип Структура ). Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры — искомое значение.

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

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

Как выполнить сортировку?

Как вычислить итоги по колонке?

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

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

Метод Свернуть() сворачивает таблицу по колонке «Наименование» и суммирует колонку «Количество». Если существуют еще колонки, то они будут удалены.

  • КолонкиГруппировок (обязательный, тип Строка ). Имена колонок, разделенные запятыми, по которым необходимо группировать строки таблицы значений.
  • КолонкиСуммирования (необязательный, тип Строка ). Имена колонок, разделенные запятыми, по которым необходимо суммировать значения в строках таблицы значений.

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

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

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

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

  • Значение (обязательный, тип Произвольный ). Искомое значение.
  • Колонки (необязательный, тип Строка , по умолчанию пустая строка). Список имен колонок, разделенных запятыми, по которым производится поиск. Если параметр не указан, поиск осуществляется по всей таблице значений.

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

Источник

Таблица значений в 1С 8.3 — примеры работы

Содержание

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

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

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

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

Добавление колонок

// Добавление колонок в таблицу значений без указания типа
ТабЗнач.Колонки.Добавить(«Сотрудник»);
ТабЗнач.Колонки.Добавить(«Должность»);
ТабЗнач.Колонки.Добавить(«Оклад»);

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

Добавление новой строки, заполнение реквизитов

// Добавление новой строки в таблицу значений
СтрокаТЗ = ТабЗнач.Добавить();

// Заполнение строки по именам реквизитов
СтрокаТЗ.Сотрудник = «Иванов Иван»;
СтрокаТЗ.Должность = «Программист 1С»;
СтрокаТЗ.Оклад = 100000;

СтрокаТЗ = ТабЗнач.Добавить();
// Заполнение строки таблицы значений по индексам колонок
СтрокаТЗ[0] = «Петров Петр»;
СтрокаТЗ[1] = «Тестировщик»;
СтрокаТЗ[2] = 80000;

Обращение к строке таблицы значений по индексу

ТабЗнач.Добавить();
// Обращение к строке таблицы значений по индексу
ТабЗнач[2].Сотрудник = «Федоров Василий»;

// Работа с таблицей как с двумерным массивом
ТабЗнач[2][1] = «Программист 1С»;

// Обращение к строке таблицы значений при помощи метода Получить
ТабЗнач.Получить(2).Оклад = 90000;

Вставить новую строку в нужное место и заполнить значения этой строки

// Вставить новую строку в указанную позицию в таблицу значений
ВставленнаяСтрока = ТабЗнач.Вставить(1);

// Заполнить строку значениями
// В качестве источника данных заполнения могут быть объекты с именованными свойствами
// — Структура, строка таблицы значений, объект, и т.п.
// метод производит сопоставление свойств по именам,
// и заполняет значения у совпавших свойств приемника — в нашем случае строки таблицы значений
ЗаполнитьЗначенияСвойств(ВставленнаяСтрока, СтрокаТЗ);
ВставленнаяСтрока.Сотрудник = «Сидоров Александр»;

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

// Заполнение колонки для всех строк таблицы значений
ТабЗнач.ЗаполнитьЗначения(10.5, «ПроцентПремии»);

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

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

// Перебрать все строки и произвести какие-то вычисления,
// например, посчитать премию, как Оклад * процент премии /100
Для Каждого СтрокаТЗ из ТабЗнач Цикл
СтрокаТЗ.Премия = СтрокаТЗ.Оклад * СтрокаТЗ.ПроцентПремии / 100;
КонецЦикла;

Копирование таблицы значений в 1С — примеры

// Создать полную копию таблицы
КопияТЗ = ТабЗнач.Скопировать();
// Создать копию таблицы значений по нужным колонкам
КопияДолжностиОклады = ТабЗнач.Скопировать(,«Должность,Оклад»);

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

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

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

// Сортировать таблицу значений по колонке в 1С 8
КопияТЗ.Сортировать(«Оклад»);

// Сортировать таблицу значений по нескольким колонкам в 1С 8
КопияТЗ.Сортировать(«Должность Убыв, Оклад Возр»);

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

// Просуммировать значения в одних колонках, свернув таблицу значений в разрезе других колонок
// При использовании метода Свернуть, все не использованные в методе колонки удалятся!
// Первым параметром идет список колонок через запятую, по которым мы хотим получить группировки
// Вторым параметром идет список колонок, значения в которых нужно просуммировать
// В этом примере в таблице значений КопияТЗ останутся только колонки Должность и Оклад
КопияТЗ.Свернуть(«Должность», «Оклад»);

Удаление строк табличной части по условию. Обратный обход таблицы значений снизу вверх

// Удаление строк из таблицы значений по условию. Обратный перебор таблицы значений в 1С
КопияДляУдаления = ТабЗнач.Скопировать();ВсегоСтрок = КопияДляУдаления.Количество() — 1;
Для Сч = — ВсегоСтрок по 0 Цикл
Если КопияДляУдаления[-Сч].Оклад > 80000 Тогда
// Удаление строки таблицы значений.
// В качестве параметра может быть как конкретная строка таблицы значений, так и индекс строки.
КопияДляУдаления.Удалить(-Сч);
КонецЕсли;
КонецЦикла;
// В результате останутся только строки, где оклад меньше или равен 80000

// Обратный перебор таблицы значений — второй вариант
КопияДляУдаленияВариант2 = ТабЗнач.Скопировать();
Сч = КопияДляУдаленияВариант2.Количество() — 1;
Пока Сч >= 0 Цикл
Если КопияДляУдаленияВариант2[Сч].Должность = «Тестировщик» Тогда
КопияДляУдаленияВариант2.Удалить(Сч);
КонецЕсли;
Сч = Сч — 1;
КонецЦикла;
// В результате останутся только строки, где должность не равна «Тестировщик»

Читайте также:  Футбол женщины чемпионат гватемалы таблица

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

// Найти одну строку в таблице значений по значению во всех колонках.
// Метод целесообразно использовать для поиска уникальных значений
НайденнаяСтрока = ТабЗнач.Найти(«Федоров Василий»);

// Найти строку по значению с поиском по определенным колонкам
// При поиске по неуникальным значениям следует учитывать, что метод вернет первую попавшуюся строку
НайденнаяСтрока = ТабЗнач.Найти(10.5, «Премия, ПроцентПремии»);

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

// Удалить все строки из таблицы значений
ТабЗнач.Очистить();

Получить навыки разработки в 1С, и составить целостное представление о платформе 1С Предприятие 8 вы можете, пройдя мой курс «Разработчик 1С с нуля».

Источник

Программирование в 1С для всех

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

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

Таблица значений 1С на управляемой форме

На любой управляемой форме 1С 8.3 разработчик может разместить таблицу значений в виде реквизита формы. Для этого нужно создать новый реквизит и задать ему тип «Таблица значений».

Реквизит формы 1С с типом Таблица значений

Таблица значений на форме размещается в виде элемента формы Таблица. Это элемент будет создан автоматически, если мы перетащим мышкой реквизит с типом таблица значений в дерево элементов.

Элемент таблица формы 1С

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

Программное создание таблицы значений 1С

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

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

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

Но имейте в виду, что если вы создали таблицу значений в процедуре или функции программного модуля управляемой формы 1С 8.3, то на клиенте (под директивой &НаКлиенте) код будет выполняться только в толстом клиенте. В тонком клиенте и на веб-клиенте нельзя работать с таблицей значений. Возникнет ошибка!

 Ошибка при работе с таблицей значений в тонком клиенте

Но, на тонком и веб-клиенте нельзя работать только с таблицей значений 1С, которая создана программно (с помощью оператора Новый). Если же таблица значений создана на форме в виде реквизита, то обращаться к этому реквизиту можно в любом контексте, платформа преобразует её в объект ДанныеФормыКоллекция.

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

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

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

О работе с колонками и строками в таблицах значений 1С читайте в статьях по ссылкам:

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

Более подробно о работе с таблицами значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

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

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

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

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

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


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

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

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

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

One thought on “ Таблица значений 1С ”

Добрый день, Ильяз! хотела поддержать проект и не смогла оплатить с Карты Маэстро.
М.б. другие варианты.
Спасибо за проект!

Источник

Adblock
detector