Uploaded by shaxter1986

Коллекции+значений+(Массивы,+Структура,+Список+значений)

advertisement
-Универсальные коллекции значений
При решении различных задач могут возникать алгоритмы, в которых необходимо
использовать множество различных данных, например: "Найти максимальное значение из
следующего набора чисел: 3,7,12,1,8". При использовании известных нам механизмов переменных
и встроенных функций, алгоритм будет следующим:
Данный способ не универсален, т.к. при добавлении нового значения потребуется
определение новой переменной:
Чтобы при добавлении новых значений не требовалось добавления новых переменных,
необходимо все множество значений определить как одну переменную с возможностью хранения
набора (коллекции) значений и обеспечить работу с каждым значением в наборе. Различные
способы работы с наборами определяют и разнообразие видов коллекций значений:
Универсальные коллекции значений называются объектами встроенного языка. Объект
встроенного языка - сложная конструкция, это связано с тем, что объект содержит в себе множество
примитивных значений. С объектами можно выполнять какие-то действия: добавить, удалить,
заменить и т.д. Действия, которые можно выполнять над объектом, называются методы. У каждого
сложного типа есть собственный набор методов. Но прежде, чем начать работу с данным объектом
необходимо создать «заготовку», это действие называют – конструктор. Конструктор создает
объект и всегда начинается с обязательного слова Новый, а далее пишут имя типа объекта.
1. Массив
Начнем практическое освоение универсальных коллекций с массивов, т.к. данный вид
коллекции определяет самый простой способ хранения значений, как набора элементов и методы
доступа к ним в наборе.
Для начала рассмотрим возможности использования массивов в 1С:Предприятие 8:
1. В системе 1С:Предприятие 8 есть возможность работы как с динамическими
массивами (размерность может изменяться в процессе эксплуатации) так и с
фиксированными (без возможности изменения размерности в момент использования).
2. Нет жестких ограничений на использование различных типов значений в рамках
одного массива, т.е. массивы 1С:Предприятия являются гетерогенными:
0 "1С:Предприятие"
1
3.
8
Поддерживаются разные по сложности структуры массивы:

Простые (одномерные, линейные) массивы можно представить в виде
таблицы с двумя колонками "индекс элемента значения" и "значение":
Индекс элемента значения Значение

Сложные массивы (многомерные) могут быть представлены как массивы,
значения которых представлены другими массивами, т.е. как массивы массивов
Индекс элемента значения
Значение
Индекс элемента значения Значение
Индекс элемента значения Значение
Определение значения переменной как массива в системе 1С:Предприятие 8 осуществляется
с помощью конструктора встроенного языка "Новый" с указанием типа "Массив":
В данном случае будет создан пустой массив, т.е. без элементов. Элементы разными
способами могут добавляться позже.
Если необходимо определить массив с начальным количеством элементов, можно указать
их количество при использовании конструктора. Например, для массива с 6-ю элементами:
Все массивы данного вида в системе 1С:Предприятие 8 являются динамическими, т.е. с
изменяемой размерностью. Для определения фиксированных массивов есть специальный тип
"Фиксированный массив" (рассмотрим в конце данной темы).
Хранение значения в массиве осуществляется по индексу, представляющему собой целое
число (первый элемент набора имеет индекс равный нулю):
0
Иванов
1
Петров
Работа с элементом массива осуществляется по индексу:
Для работы с данными массива необходимо использовать методы, которые представлены в
Синтакс-помощнике:
Для использования методов работы с массивом в тексте алгоритма указываем сначала имя
переменной, содержащей массив, затем через точку имя метода:
<ИмяПеременной>.<ИмяМетода>
Точка между именем переменной и именем метода определяет, что указанный метод
применяется к значению, хранящемуся в данной переменной.
Например, при работе с массивом, можно использовать методы получения количества
элементов в массиве:
Для поиска элемента массива по значению можно воспользоваться методом найти,
возвращающем (в нашем примере) индекс элемента массива:

Наполнение массива и доступ к значениям массива может происходить
разными способами:
записью и чтением значений, как через оператор [], так и методами Установить и
Получить:
добавление элемента значения в конец набора с расширением размерности массива:
вставкой элемента значения по определенному индексу с расширением размерности
массива:

Очистка массива может осуществляться:
выборочно по элементам, через указание индекса элемента с уменьшением размерности:
полностью - все элементы удаляются с уменьшением размерности массива до нуля
(получаем пустой массив):
Если требуется ограничить возможности по изменению размерности массива, можно
создать фиксированный массив (на основании динамического массива, как копию):
Для обхода элементов массива (и других коллекций значений) часто используется
цикл Для Каждого:
Для Каждого <Элемент> Из <Коллекция> Цикл
// Операторы
КонецЦикла;
Цикл будет закончен, когда будут перебраны все элементы коллекции. Использование
такого цикла рассмотрим на примере последовательного перебора всех элементов
одномерного массива, с последующим выводом значений элементов в окно сообщений. В
приведенном ниже примере цикл для каждого работает 3 раза (ровно столько, сколько
элементов в массиве Массив), каждый раз сохраняя очередной рассматриваемый элемент
массива в переменную Элемент и выводя значение этой переменной.
Пример решения задачи с использованием массива.
Имеется строка входных данных «Бендер,Балаганов,Воробьянинов».
Требуется перевести все данные в массив. Вывести все значения массива.
Для решения задачи воспользуемся встроенными функциями работы со значениями типа Строка:
У этой функции есть три параметра: Строка, Разделитель и ВключатьПустые.
Строка – это исходные данные, разделяемая строка. Разделитель – это строка символов,
каждый из которых является индивидуальным разделителем. ВключатьПустые указывает
необходимость включать в результат пустые строки. Возвращаемое значение: массив со строками,
которые получились в результате разделения исходной строки. В результате должен получиться
Массив, в каждой ячейке которого будет храниться Тип Строка.
Для решения задачи – заводим исходные данные:
Применить метод СтрРазделить к исходной строке: первый параметр – ИсходныеДанные, второй
параметр «,» - запятая, третий пока не ставим.
Чтобы вывести все значения используйте Цикл Для Каждого
То, что требовалось в задаче.
Если исходная строка будет записана следующим образом (вместо запятой будет стоять пробел), то
результат будет другой. Пробел не является символом разделителем, чтобы исправить данную
ситуацию, после запятой добавьте пробел.
Теперь функция СтрРазделить будет делить данные и по запятой, и по пробелу. Каждый символ в
строке является самостоятельным разделителем.
Теперь о параметре ВключатьПустые. Если в конце строки поставить пробел, то программа выведет
пустое сообщение:
Чтобы исключить пустые сообщения, необходимо третий параметр поставить в значение Ложь (по
умолчанию он имеет значение Истина), теперь он будет пропускать пустые сообщения и результат
будет следующим:
2. Структура
При использовании массивов, обращение к элементу значения осуществляется по
числовому индексу элемента (как мы уже знаем), но при решении некоторых задач предметной
области, может возникнуть необходимость обращения к элементам не по индексам, а по именам,
для улучшения восприятия логики алгоритма.
Для решения данной задачи индекс элемента должен быть строковым, т.е. модель доступа к
элементам требуется новый вид коллекции. Для реализации такого способа работы с элементами в
коллекции значений разработчики системы 1С:Предприятие 8 создали тип коллекции СТРУКТУРА
В отличие от массива, в структуре индекс элемента является строковым и поэтому
называется ключом. Ключ определяется по правилам именования переменных, поэтому, можно
сказать, что ключ является идентификатором элемента в наборе (идентифицирует, т.е. определяет
элемент в наборе). Использование в качестве ключа строки с пробелами реализуется с помощью
другого вида коллекции СООТВЕТСТВИЕ (рассматривается в следующем разделе).
Использование имени для каждого элемента набора очень удобно для тех случаев, когда
требуется определить хранение элементов значения с учетом логики дальнейшего их
использования. Таким образом, мы определяем структуру хранения (когда каждый элемент имеет
свое назначение), например, при хранении адреса:
Ключ элемента значения
Значение
Город
Томск
Улица
Новая
Дом
15
Физически систему хранения структуры в памяти можно увидеть в режиме отладки:
Для использования структуры без возможности изменения состава значений можно
использовать разновидность данной коллекции: "Фиксированная структура":
Рассмотрим на практике приемы использования коллекции СТРУКТУРА. Для практики нам
потребуется описание возможных методов и свойств из синтакс-помощника:
Начнем, как обычно, с создания переменной с типом СТРУКТУРА
Создание структуры ФИО возможно с помощью конструктора встроенного языка "Новый"
и указания типа значения "Структура":
В данном случае в переменной ФИО будет создано значение типа СТРУКТУРА без
элементов, т.е. пустая структура. Такой вариант может использоваться для универсальных задач
хранения значений, когда заранее не известно, что будем хранить и как идентифицировать.
Для создания значения с определенной структурой хранения данных, можно передать
список ключей в момент создания значения типа СТРУКТУРА:
В данном случае мы получаем переменную с определенной структурой хранения значений,
без самих значений:
Для уменьшения количества строк алгоритма разработчики добавили возможность при
создании указывать не только набор ключей, но и значения, например, для определения начальных
значений:
И так, мы разобрались с приемами создания значений типа СТРУКТУРА.
Теперь разберемся на практике с вариантами доступа к элементам структуры:

первый способ – как в случае с массивом, воспользуемся указанием ключа через
квадратные скобки
Данный способ может использоваться для построения универсальных алгоритмов:

второй способ – с учетом новой возможности обращения к элементу значения через
ключ, как свойство значения. В данном случае указание ключа осуществляется через
точку после имени переменной. Такой способ стал возможен, т.к. ключ структуры
является идентификатором элемента в коллекции:
Изменение состава коллекции значений структура связано с двумя задачами:
1.
Добавление элементов может осуществляться разными способами

первый способ – при
конструктор НОВЫЙ
создании
через
параметры,
передаваемые
в

второй способ – в момент использования с помощью метода "вставить" для
значения типа СТРУКТУРА с указанием имени ключа и значения
Удаление элементов из коллекции может происходить:

выборочное – с указанием определенного элемента с помощью метода
удалить и передачи имени ключа, удаляемого элемента:
Как видим, при попытке обращения к элементу по несуществующему ключу (ключ удален),
система выдает предупреждение об ошибке.

полное – удаление всех элементов коллекции с помощью метода "Очистить":
Для решения некоторых задач, связанных с чтением и анализом всего набора значений,
могут потребоваться вспомогательные методы для работы с коллекцией.
Пример №1. Мы не знаем, есть ли у рассматриваемой нами коллекции нужное нам
свойство. Необходимо проверить его наличие и, если оно есть получить его значение. Данную
задачу можно решить с помощью метода "Свойство":
Пример №2. Необходимо узнать, является ли рассматриваемая нами структура пустой или
в ней есть элементы. Для решения данной задачи нам необходимо определить количество элементов
коллекции:
3. Список значений
Список значений предназначен для хранения коллекции значений и их пользовательских
представлений в интерфейсе.
Представление значений
"Пометка" и "Картинка".
может
задаваться тремя
вариантами:
"Представление",
Представление – используется для хранения строкового представление значения и имеет тип
"Строка"
Пометка – может использоваться, например, для хранения признака использования значения и
имеет тип "БУЛЕВО"
Картинка – используется для графического представления значения и имеет тип "Картинка"
На следующей картинке мы видим пример интерфейсной работы со списком значений:
Download