Универсальные коллекции значений 1С

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

Рисунок

Типы универсальных коллекций 1С

[свернуть]

Просмотр элементов коллекции при отладке

Для просмотра элементов массива при отладке в конфигураторе:

  1. поставить точку останова;
  2. нажать Shift+F9 (вызвать окно "Выражение");
  3. ввести наименование массива;
  4. выделить его и нажать F2.

[свернуть]

Типы универсальных коллекций 1С:

  • Массив (и ФиксированныйМассив);
  • Структура (и ФиксированнаяСтруктура);
  • Соответствие (и ФиксированноеСоответствие);
  • Список значений;
  • Таблица значений;
  • Дерево значений;
  • COMSafeArray;
  • КлючИЗначение;
  • ФиксированнаяКоллекция.
Рисунки для понимания

Рисунки из курса  https://ironskills.by/ 

Массив

Соответствие

Структура

Список значений

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

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

Коллекция Тип ключа
Массив Число (индекс, начиная с 0)
Структура Строка
Соответствие Любой тип
Список значений  Число (индекс, начиная с 0)

[свернуть]

Коллекции могут:

  1. возвращаться в виде результата какой-либо функции (функция возвращает в качестве значения универсальную коллекцию);
  2. задаваться разработчиком непосредственно в коде (обратившись к конструктору Новый и создав экземпляр класса).

Например:

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

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

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

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

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

  1. циклом Для;
  2. циклом Для каждого ... Из.

Методы большинства универсальных коллекций:

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

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

    [свернуть]

Массив

Массив - пронумерованная коллекция значений произвольного типа.

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

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

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

Так как индекс начинается с нуля, система возвращает элемент массива с индексом 2, но третий (по порядку) элемент массива.

Особенности работы с массивами:

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

      [свернуть]
Получение массива из запроса

[свернуть]

Структура

Структура - поименованная коллекция, состоящая из пар "ключ - значение", причем

  • ключ может быть только строковым;
  •  а значение - произвольного типа.

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

К элементу структуры можно обращаться по значению его ключа, т.е. по имени.

Примеры

[свернуть]

Поиск значения в структуре и его получение

[свернуть]

Обход элементов структуры

[свернуть]

Соответствие

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

Примеры работы с соответствием

 

[свернуть]

Список значений

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

Особенности списка значений:

  1. может содержать значения любого типа;
  2. в одном списке типы хранимых значений могут быть разными.

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

Пример

[свернуть]

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

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

Особенности таблицы значений:

  1. недоступна в тонком клиенте (см. раздел "Доступность" в Справке);
  2. может быть наполнена значениями любого типа;
  3. в одной таблице типы хранимых значений могут быть разными.

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

Поиск одной строки (метод Найти() )

[свернуть]

Поиск всех строк, удовлетворяющих условию поиска (метод НайтиСтроки() )

[свернуть]

Поиск всех строк, удовлетворяющих сложному условию поиска (поиск по нескольким значениям)

[свернуть]

Обход таблицы значений с неизвестными именами колонок

[свернуть]

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

[свернуть]

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

[свернуть]

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

[свернуть]

Получение итога по колонке числового типа

[свернуть]

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

ВАЖНО! Исходная таблица заменяется результатом свертки.

[свернуть]

Дерево значений

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

Пример

Дерево значений

[свернуть]

Отличие от таблицы значений:

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

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

COMSafeArray

COMSafeArray представляет собой объектную оболочку над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами.

ФиксированныйМассив

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

ФиксированнаяКолекция

Системная коллекция значений. Используется в качестве значений свойств других объектов. Заполняется системой при инициализации объектов данного типа.

Набор свойств этого объекта определяется в зависимости от контекста его использования и описан подробнее в описании тех свойств, где он используется.

Создать этот объект средствами встроенного языка нельзя.

ФиксированноеСоответствие

Представляет собой неизменяемую коллекцию пар КлючИЗначение.

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

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

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

ФиксированнаяСтруктура

Представляет собой фиксированную коллекцию пар КлючИЗначение.

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

К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.

Предназначен для использования в качестве значений параметров сеанса.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.