Чем массив отличается от списка значений 1с
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: массивы в 1С
Автор уроков и преподаватель школы: Владимир Милькин
Сегодня мы познакомимся с новым типом данных языка 1С, который называется Массив.
Массивы в языке 1С
Что такое массивы и зачем они вообще нужны программисту?
Давайте представим, что у нас есть 4 разных числа. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. К примеру: 25, 84, 31 и 96. Если бы мы захотели использовать их в своей программе, то нужно было бы дать имя каждому из чисел. А что если хранить их все вместе, под одним общим именем, к примеру, СлучайныеЧисла. И обращаться к ним как СлучайныеЧисла0, СлучайныеЧисла1, СлучайныеЧисла2 и так далее.
Значений много, а имя одно. И чтобы получить конкретное значение мы бы указывали имя и порядковый номер (начиная с нуля). Это и был бы массив.
Ещё полезно представлять себе массив как шкаф, у которого множество нумерованных ящиков (начиная с нуля). Шкаф - это массив, а ящики - это номера. Содержимое ящиков - элементы массива. Доступ к содержимому конкретного ящика осуществляется по имени шкафа и номеру ящика.
В языке 1С это будет выглядеть так:
Обращаю ваше внимание, что в этом примере я в первый раз использовал пояснения прямо в коде. Такие пояснения называются комментариями. Они отделяются от кода программы двумя косыми чертами и нужны только для программиста - компьютер их игнорирует. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
В массивах можно хранить значения разных типов, а не только числа:
В ящики массива значения можно не только класть, но и доставать:
Прелесть использования массивов состоит именно в том, что доступ к их значениям осуществляется через числовой номер. А значит мы легко можем перебирать все значения массива в цикле:
Задание №30. Необходимо ввести от пользователя 5 чисел, найти их сумму и вывести результат.
Давайте решим эту задачу двумя способами.
Сначала без использования массива:
А теперь с использованием массива:
Вроде бы сэкономили всего три строки. А если бы нужно было ввести не 5, а 100 чисел?
Задание №31. Переделайте приведенный выше пример, чтобы вводилось 10 чисел и находилось произведение.
Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся
Войдите на сайт как ученик
При помощи массивов можно решать достаточно сложные задачи. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Задание №32. Необходимо ввести от пользователя 5 чисел, найти наименьшее из них и вывести его.
Решение будет таким:
Разберитесь с этим примером и выполните его на компьютере для различных значений.
Идём далее. Обратите внимание на то, что во всех примерах выше мы создаём массив сразу с нужным количеством ящиков. Например:
Это означает, что у этого массива есть ящики под номерами 0, 1, 2, 3, 4.
А, что если мы бы захотели объявить пустой массив? Это делается вот так:
Если мы сразу после объявления пустого массива попытаемся обратиться к одному из его ящиков, то получим ошибку:
В пустой массив ящики нужно сначала добавить, причём сразу указывая их значения:
И вот теперь мы можем обращаться к этим ящикам по их номерам (помните, что в 1С массивы нумеруются с нуля):
Кстати, чтобы в любой момент узнать количество ящиков в массиве, воспользуемся командой Количество. Её нужно вызывать через точку после имени массива:
Коллекции значений 1С — это универсальные объекты Массив, Список значений, Таблица значений, Дерево значений, Структура, Соответствие.
Универсальные коллекции значений в 1С:
- Коллекции значений 1С — Массив
Простейший набор значений, например – массив из 7 значений: 1,2,5,20,»Зеленый»,’20120610120000′,2350 - Коллекции значений 1С — Список значений
Массив с расширенным функционалом – каждое значение имеет «представление» (то, как оно будет отображено пользователю в интерфейсе), сортировка, интерфейсные функции (используется для выбора значения из списка на форме в «выпадающем списке»). - Коллекции значений 1С — Таблица значений
То же, что и табличная часть, но с возможностью динамически создавать и использовать нетипизированные колонки. Представляет собой обычную таблицу, аналогичную таблице Excel. В виде таблицы значений можно получить результат запроса из базы данных. - Коллекции значений 1С — Дерево значений
Расширенная таблица значений, у которой каждая строка может иметь подчиненные строки. - Коллекции значений 1С — Структура
Аналог подобных объектов из других языков программирования – создание динамического набора переменных с именами. - Коллекции значений 1С — Соответствие
Соответствие пар значений. Аналогично структуре, но вместо «название переменной – значение» в соответствии используется «одно значение – другое значение».
Все виды универсальных коллекций в 1С имеют схожие методы управления (методы), например: Добавить(), Удалить(), Найти() и т.п.
К значениям любой коллекции можно обращаться схожими способами.
Для «неименованных» коллекций – по индексу (массив, список значений):
- Коллекция.Получить(Индекс) и Коллекция.Установить(Индекс)
- Коллекция[Индекс]
Для «именованных» коллекций – по имени (значение поля в строке таблицы – по имени колонки):
При передачи коллекции как параметр внутрь процедуры/функции – изменения внутри функции сохранятся после выхода из нее, например:
Процедура ДобавитьЗначение(сзПример)
сзПример.Добавить(100);
КонецПроцедуры
сзПример = Новый СписокЗначений();
сзПример.Добавить(200);
ДобавитьЗначение(сзПример); //вызываем процедуру
Сообщить(сзПример.Количество()); //в массиве будет 2 значения, хотя одно добавлено вне процедуры, а одно внутри
Список значений 1С с натяжкой можно назвать расширенным аналогом массива 1С. Это также – набор значений (значения могут разных типов), есть поиск и сортировка значений.
В дополнение – отличия списка значений 1С от массива 1С.
В списке значений отсутствует:
- список значений 1С создается пустой, а значений добавляются потом (т.е. недоступно: Массив = Новый Массив(10))
- многомерность (хотя элементом списка значений 1С может быть другой элемент массива значений)
- метод ВГраница()
В списке значений 1С есть дополнительные возможности:
- в массиве «элемент» — это непосредсвенное значение, а в списке значений 1С «элемент» это структура со свойствами .Значение и .Представление
- каждый элемент списка значений 1С отображается в интерфейсе не по значению, а по представлению (если оно задано), которое может сильно отличаться от значения (так как задал программист)
- у каждого элемента может быть отображена картинка и «чекбокс» (квадратик для установки галочки «отмечено или нет»)
- у списка значений 1С есть метод выбора пользователем значения из списка.
Список значений 1С часто используется:
А) Как обычный массив
Б) Для работа со списком значений 1С на интерфейсе (например выбор значения в «выпадающем списке»)
В) Для отборов в интерфейсных списках (отбор по множеству значений).
Список значений 1С можно использовать для отбора в запросе полностью также, как и массив (см. пример в «Работа с массивами»).
Список значений 1С можно создать из массива:
спЗначений = Новый СписокЗначений();
спЗначений.ЗагрузитьЗначения(Массив);
Массив можно создать из списка значений 1С:
Массив = спЗначений.ВыгрузитьЗначения();
Пример — создадим список значений 1С из 2 значений:
спЗначений = Новый СписокЗначений(); //массив без фиксированного кол-ва значений
ГСЧ = Новый ГенераторСлучайныхЧисел(); //будем заполнять случайными числами
спЗначений.Добавить( ГСЧ.СлучайноеЧисло(0, 1000) );
спЗначений.Добавить( ГСЧ.СлучайноеЧисло(0, 1000) );
//цикл прохода каждого значения массива, сколько бы их ни было
Для каждого Знч из спЗначений Цикл
Сообщить(Знч.Значение); //обратите внимание – отличия от массива, обращаемся к значению «ячейки» через .Значение
КонецЦикла;
Список значений имеет визуальное выражение, массив - нет. А вообще СЗ - это частный случай массива (ИМХО)
Массив - применяем там, где его возможностей хватает) Собрать нужные элементы в цикле и передать как параметр в запрос. Собрать массив уникальных значений или поиск среди данных массива методом "Найти".
Список значений - чаще всего применяется для отображения данных на форме, в качестве реквизита формы, для работы с данными списка значений.
Или выбор чего-либо в диалоговом окне (метод ПоказатьОтметкуЭлементов).
У списка значений есть "Значение" и "Представление", что может быть полезным в каких-то отдельных ситуациях, когда нужно два поля для хранения информации.
Методы "СортироватьПоЗначению" и "СортироватьПоПредставлению" - бывают полезны, когда пользователю нужен выбор сортировки из двух вариантов (например, по коду или наименованию).
Во многом соглашусь с Сергеем Самариным (коммент выше). От себя добавлю. Сам тип СписокЗначений довольно широк в применении. У него как максимум 4 параметра для различного отображения (см скрин).
Как и сказал Сергей, список значений можно использовать как значения для запроса, если этот список выгрузить - результат выгрузки списка будет массив.
Технически Массив и СЗ родственные, не удивлюсь, если СЗ является потомком Массива (ну или наоборот).
Массив не имеет представления. СЗ представление имеет, плюс картинку и пометку.
Массив, как и СЗ, можно передавать как параметр между сервером и клиентом.
Но, в связи с тем, что СЗ сам по себе гораздо сложный объект, эффективней и экономней, с точки зрения трафика, использовать массив.
Стас Дубиковский
Pavel Stepkin
Гугль в помощь вот первый, на мой взгляд исчерпывающий ответ
В списке значений 1С есть дополнительные возможности:
в массиве «элемент» — это непосредсвенное значение, а в списке значений 1С «элемент» это структура со свойствами .Значение и .Представление
каждый элемент списка значений 1С отображается в интерфейсе не по значению, а по представлению (если оно задано), которое может сильно отличаться от значения (так как задал программист)
у каждого элемента может быть отображена картинка и «чекбокс» (квадратик для установки галочки «отмечено или нет»)
у списка значений 1С есть метод выбора пользователем значения из списка
Список значений это универсальная коллекция значений, которая, по сути, одномерный динамический массив, созданный в рамках платформы 1С для решения некоторых интерфейсных задач. В отличие от простого массива, элементы которого могут быть произвольных типов, у списка значений каждый элемент имеет специальный тип Элемент списка значений. Элемент списка значений может хранить в себе следующие данные: само значение (любого типа), представление значения (тип строка), пометка (тип булево) и картинка (тип картинка).
Работать со списком значений (создавать, заполнять и т.д.) можно и в тонком, и в толстом клиенте.
Программно в конфигураторе 1С создать список значений необходимо при помощи конструктора Новый.
Список = Новый СписокЗначений ;
После создание списка значений с ним можно работать — добавлять новые значения, выгружать значения в массив и загружать значения из массива.
Как добавить новое значение в список
Для того чтобы нам начать работать со списком значений, необходимо заполнить его элементами.
Сделать это можно тремя способами: добавить новый элемент (добавится в конец списка), вставить новый элемент в нужное место и загрузить элементы из массива. Для добавления элемента в конец списка используется метод Добавить(), а для вставки элемента в нужное место списка – метод Вставить()
Метод добавить имеет следующий синтаксис:
Значение — это может быть объект любого типа, который будет храниться в списке значений.
Представление — задаем, каким образом объект будет представлен пользователю в списке. Имеет тип строка. Это необязательный параметр, в случае отсутствия представления объект будет показан в обычном виде.
Пометка -задает, будет ли у данного объекта в списке пометка выбора или нет. Имеет тип Булево. Тоже необязательный параметр.
Картинка – картинка, которая привяжется к нужному элементу.
Обязательным является первый параметр.
Добавить элементы можно так:
Список . Добавить ( 100 , «Число 100» );
Список . Добавить ( 10 , «Число 10» );
Список . Добавить ( 100 );
Список . Добавить ( 10 );
Метод Вставить имеет следующий синтаксис.
Все параметры, кроме Индекса, точно такие же, как у метода Добавить.
Параметр Индекс указывает непосредственно номер позиции, на который устанавливается элемент. Элемент, который был на этом индексе, сдвигается на плюс один, и все последующие элементы тоже.
Т.е. при написании следующего кода:
Список = Новый СписокЗначений ;
Список . Добавить ( 100 , «Число 100» );
Список . Добавить ( 10 , «Число 10» );
Список . Вставить ( 0 , 1000 , «Число 1000» );
Элементы будут расположены таким образом:
Как загрузить массив в список значений
С помощь метода ЗагрузитьЗначения в список значений можно загрузить одномерный массив.
Все предыдущие элементы списка значений при этом удалятся. Об этом надо всегда помнить.
Делается это достаточно просто – необходимо передать в метод нужный массив.
Массив = Новый Массив ;
Массив . Добавить ( «Иванов И.И» );
Массив . Добавить ( «Петров А.Н» );
Список = Новый СписокЗначений ;
Список . ЗагрузитьЗначения ( Массив );
Элемент списка значений
Мы научились добавлять, вставлять и загружать элементы в список значений, рассмотрим, что вообще такое Элемент списка значений.
Если элементы массива это и есть те значения, которые хранятся в массиве, то элементом списка значений является отдельный объект, который имеет свойства и методы. Все параметры метода Добавить списка значений являются свойствами элемента списка значений, который будет создан при помощи этого метода. Любой список значений состоит из объектов Элемент списка значений. Мы можем обратиться к любому элементу списка значений и работать с ним самостоятельно как с объектом. Но объект Элемент списка значений не может существовать без своего родителя — Списка значений.
Обратиться непосредственно к элементу списка значений можно двумя способами: с помощью оператора квадратные скобки и с помощью метода Получить.
ПервыйЭлемент = Список [ 0 ];
ПервыйЭлемент = Список . Получить ( 0 );
В метод получить передается только один параметр – индекс нужного элемента
После того, как мы получили нужный элемент, к его свойства (Значение, Представление, Пометка, Картинка) можно обращаться через точку.
Причем можно как считать значение нужного свойства, так и записать в это свойство какое-либо значение.
ПервыйЭлемент = Список . Получить ( 0 );
ПервыйЭлемент . Представление = «Иванов Иван Иванович» ;
Сообщить ( ПервыйЭлемент . Значение + » — » + ПервыйЭлемент . Представление );
Как перебрать список значений
Перебрать список значений довольно просто – необходимо воспользоваться или циклом Для…Цикл, тогда получать элемент списка значений нужно будет посредством квадратной скобки (или метода Получить), или циклом Для каждого Цикл, в этом случае мы будем получить уже непосредственно элемент в каждой итерации цикла.
Для н = 0 по Список . Количество () — 1 Цикл
ЭлемСписка = Список [ н ];
Сообщить ( ЭлемСписка . Значение );
КонецЦикла;
Обратите внимание, что максимальное значение счетчика цикла должно соответствовать количеству элементов списка минус один, т.к. индекс начинается с нуля.
Гораздо практичнее пользоваться циклом Для каждого Цикл
Для Каждого ЭлемСписка из Список Цикл
Сообщить ( ЭлемСписка . Значение );
КонецЦикла;
В этом случае, мы сразу получаем нужный элемент списка в каждой итерации.
Статьи о других универсальных коллекциях значений в 1С
Более подробно о работе со списками значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
Читайте также: