Объекты встроенного языка
Коллекция значений в 1С — это удобный инструмент «на время», чтобы собрать данные вместе, обработать их и использовать в программе, не сохраняя в основной базе. В коллекцию могут входить значения разных типов.
Но чаще всего в коллекцию входят значения одинакового типа. Во встроенном языке программирования 1С есть разные типы, которые являются коллекциями
значений. Каждый из этих типов имеет свои значения. Такие значения сильно
отличаются от значений примитивных типов (число, строка), поэтому все они имеют собственное название и называются объектами встроенного языка. Или
просто объектами.
Объект встроенного языка — это сложная конструкция с характерными особенностями, связанными именно с тем, что объект содержит в себе множество примитивных значений.
Методы, конструкторы
Первая особенность связана с тем, что объект «из чего-то состоит». Это значит, что могут требоваться какие-то действия, чтобы изменить его состав. Такие действия, которые можно выполнять над объектом, называются методы. У каждого сложного типа есть собственный набор методов.
Вторая особенность объектов тоже связана с тем, что они «из чего-то состоят». Практически у всех объектов есть такое специальное действие, которое создаёт «заготовку» объекта. И это действие, в отличие от других методов, имеет собственное название — конструктор.
Конструкторы многих объектов позволяют не только создать «заготовку», но и
заполнить объект какими-то значениями. Для коллекций значений более типичны конструкторы, создающие пустые объекты и без данных.
Массив
Универсальные коллекции значений — это несколько типов, которые можно использовать для самых разных задач. Значения этих типов, объекты, существуют только в то время, пока выполняется программа. Когда программа перестанет выполняться, объекты универсальных коллекций исчезнут, поскольку они существуют только в оперативной памяти компьютера.
Все эти типы, универсальные коллекции значений, описаны в синтакс-помощнике, и их можно посмотреть. Откройте синтакс-помощник, раскройте ветку Универсальные коллекции значений :
Познакомимся с двумя из универсальных коллекций значений (Массив и Структура) Массив пригодится для улучшения разрабатываемого электронного дневника. Структура пригодится позже. Остальные коллекции устроены аналогичным образом.
Представьте, что вам нужно где-то хранить предметы. Каждая вещь —это одно значение. Тогда массив — это ячейки, в которых можно хранить по одной ценности.
Когда потребуется одна из вещей, попросим достать предмет из определенной ячейки. Раскройте ветку Массив, найдите в нем Методы и Конструкторы:
Зачем нужен тот или иной метод:
Добавить() - добавляет предмет в ячейку, Удалить() — удаляет, Количество() — считает, сколько предметов в чейках, а Очистить() — освобождает все
ячейки.
Конструкторов два.
Конструктор "По количеству элементов" создаёт пустой массив, им будем пользоваться, им пользуются чаще всего.
Второй конструктор "На основании фиксированного массива" делает буквально следующее: «сделайте мне такие же ячейки с предметами». Мы им не будем
пользоваться, и в реальных конфигурациях он используется нечасто.
Теперь приступим к делу. Создаем массив, в котором будут содержаться названия дней недели. Каждое название дня недели — это «предмет».
Значение типа Массив (объект встроенного языка) будет храниться в переменной ДниНедели. Поэтому пишем ДниНедели и ставим знак равенства:
Возьмите мышью конструктор "По количеству элементов в синтакс-помощнике" и перетащите его в то место, где стоит курсор. Платформа вставит туда заготовку конструктора:
Конструкторы всех объектов выглядят одинаково. Они начинаются с обязательного
слова Новый, а затем пишется имя типа. Вы хотите создать объект типа Массив, поэтому
после Новый пишете Массив.
После имени типа в скобках могут указываться, а могут и не указываться дополнитель
ные параметры. Что нужно указывать в случае с массивом, вы можете сами посмотреть с
синтакс-помощнике. Дважды щёлкните мышью на конструкторе По количеству элемен
тов.
В простом случае вы можете сразу указать там количество элементов, которое будет
содержаться в массиве. То есть сколько полок должно быть в стеллаже. Это одномерный
массив.
Вы будете создавать одномерный массив, но количество заранее указывать не будете.
То есть у вас будет «безразмерный» массив.
Бывают и многомерные массивы. Их вы рассматривать не будете. Но если у вас хоро
шее воображение и вы хотите представить себе двухмерный массив 3×2, то это стеллаж
из трёх полок (первое измерение), на каждой полке которого стоит ещё один стеллаж из
двух полок (второе измерение).
Итак, у вас будет безразмерный массив, поэтому к тому, что вставила платформа,
ничего больше дописывать не нужно.
Теперь заполните массив названиями дней недели. Это делается просто (рисунок 3.151).
Пока не пишите.
В переменной ДниНедели у вас находится объект типа Массив. Чтобы заставить этот
объект выполнить какое-то действие, нужно через точку написать имя метода.
Когда вы напишете ДниНедели и поставите точку, произойдёт следующее. Платформа
уже знает, что в этой переменной находится не «что-то там», а объект совершенно конкрет
ного типа. Типа Массив. Поэтому она сразу откроет контекстную подсказку и предложит
вам все методы, которые есть у этого объекта. Попробуйте
Символом f(), от английского слова function, платформа обозначает те мето
ды, которые возвращают какое-то значение. То есть методы, которые внутри
платформы реализованы как функции. А символом p(), от английского слова
procedure, — методы, которые ничего не возвращают. Такие методы реализованы
как процедуры.
Вам останется только выбрать из них тот метод, который вам нужен. Просто, правда?
Допишите инструкцию до конца.
Что делает метод Добавить() и как его нужно записывать, вы можете посмотреть
сами в синтакс-помощнике. В нём нет ничего сложного, просто в скобках нужно указать
то значение, которое вы хотите поместить в массив.
А теперь маленькая программистская хитрость. По условиям задачи вам нужно до
бавить в массив ещё шесть элементов. То есть написать такие же инструкции, только с
другими днями недели. Писать одно и то же скучно. Поэтому сейчас вы просто шесть раз
скопируете эту строку, а потом только поменяете названия дней недели. Делается это так.
Выделяете строку, нажав мышью на серой линии слева
Нажимаете сочетание клавиш Ctrl+Insert, чтобы скопировать выделенное в буфер
обмена. А теперь сразу же нажимаете семь раз сочетание клавиш Shift+Insert. Чтобы
вставить содержимое буфера обмена. В результате у вас получается семь одинаковых
строк
Теперь во второй строке дважды щёлкаете мышью на слове Понедельник и меняете
его на Вторник
И так шесть раз
Всё! Пример готов. Можете установить точку останова на конец процедуры и запустить
1С:Предприятие в режиме отладки.
Но теперь возникает вопрос. Как посмотреть, что находится в массиве?
Способы подвести курсор или открыть локальные переменные в случае с объектами
вам не помогут. Тут надо использовать Вычислить выражение.
Дваждыщёлкните на слове ДниНедели и нажмите (если вы забыли) сочетание клавиш
Shift+F9. Откроется окно вычисления выражений
Но тут по-прежнему очень мало информации.
Тогда выделите единственную строку, которая есть в окне Результат, и нажмите F2:
Спомощьюэтой«волшебной» кнопки F2 вы можете просматривать содержимое любых
объектов, которые являются коллекциями. Если вы вдруг её забудете, она всегда под
рукой в командной панели и называется Показать значение в отдельном окне
Массив — это нумерованная коллекция. То есть её элементы расположены не просто
так, а в определённом порядке друг за другом. Для этого у каждого элемента массива
есть индекс. Индекс — это как номер по порядку, только начинается он не с единицы, а с
нуля.
Примечание
Везде во встроенном языке, где вам попадётся слово «индекс», знайте: индекс
первого элемента всегда равен нулю, а индекс последнего элемента вычисляется
по формуле: «количество элементов минус единица».
Итак, у каждого элемента массива есть индекс, а значение элемента массива — это само
то значение, которое вы туда поместили. Если вспомнить стеллаж, то в данном случае он
будет выглядеть так
Теперь о методах, которые есть у массива. То есть о тех действиях, которые можно
выполнять с объектом типа Массив.
Метод Добавить() вы уже знаете. Он добавляет новое значение в конец массива.
Методы Вставить() и Установить() тоже добавляют одно значение. Но не в конец, а в ту
позицию, которую вы укажете. При этом Вставить() раздвигает элементы, а Установить()
замещает тот элемент, который уже есть в этой позиции.
Например, если вы захотите вставить или установить число 2 во вторую позицию мас
сива, то результат будет такой
Метод Количество() сообщает, сколько элементов в массиве. А метод ВГраница() ну
жен только для того, чтобы быстро узнать индекс последнего элемента и не писать вместо
этого Количество()- 1.
Метод Очистить() удаляет все элементы, а метод Удалить() удаляет только один эле
мент.
Метод Получить() возвращает значение, которое находится по указанному индексу. А
метод Найти() возвращает индекс того значения, которое вы ищете.
То есть ДниНедели.Найти("Вторник") вернёт вам число 1, а ДниНедели.Получить(1)
вернёт вам строку "Вторник". Можете попробовать.
Задание 3.33
Создайте массив и запишите в него названия всех месяцев по порядку.
Задание 3.34
Посмотрите содержимое массива из предыдущего задания в конфигураторе.
Задание 3.35
В массив из задания 3.33 добавьте два элемента.
Один элемент, «--- Начало лета», добавьте перед месяцем, который называется
«Июнь». Этот месяц нужно найти по названию.
Второй элемент, «--- Конец лета», добавьте после месяца, который называется
«Август». Этот месяц тоже нужно найти по названию.
Посмотрите в конфигураторе, правильно ли вы выделили летние месяцы.
Задание 3.36
С помощью цикла обойдите все элементы массива и добавьте в конец каждого
названия текущий год. Чтобы, например, вместо «Январь» стало «Январь 2016
г.».
Посмотрите в конфигураторе, правильно ли выглядит результат.