Чем массив отличается от списка значений 1с

Обновлено: 30.06.2024

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

Внутренний язык программирования 1С 8.3 для начинающих программистов: список значений в 1С

Автор уроков и преподаватель школы: Владимир Милькин

Сегодня мы познакомимся с новым типом данных языка 1С, который называется СписокЗначений.

Список значений в языке 1С

Похож на массив

Список = Новый СписокЗначений; // создали список значений Список.Добавить(10); // добавили в список число 10 Список.Добавить(0); // добавили в список число 0 Список.Добавить(-5); Список.Добавить(23);

Его элементы не просто значения

Чтобы теперь вывести эти числа пользователю напишем:

// пробежимся циклом по каждому элементу списка Для Каждого Элемент Из Список Цикл Сообщить(Элемент.Значение); // выводим значение элемента КонецЦикла;

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

  • Значение (может иметь произвольный тип)
  • Представление (тип Строка)

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

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

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

Убедиться в этом легко:

Для Каждого Элемент Из Список Цикл Сообщить(Элемент.Значение); Сообщить(Элемент.Представление); КонецЦикла;

В этой особенности и состоит главное отличие списка значений от массива. Список содержит в себе не только сами значения, но ещё их представления в виде строки (или даже картинки).

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

Разберите и выполните на компьютере следующий пример:

Умеет сортировать

Мы можем легко отсортировать список значений. Список умеет это делать сам:

Умеет искать

Список значений, также как и массив, умеет сам искать свои элементы. Пусть мы хотим выяснить, присутствует ли введённое пользователем число в нашем списке:

Поддерживает вставку и удаление

Список значений, также как и массив, поддерживает вставку и удаление элементов:

Поддерживает квадратные скобки

Как вы уже поняли, нумерация элементов списка также идёт с нуля и мы можем обратиться к любому элементу по его индексу используя квадратные скобки:

Сообщить(Список[1].Значение); // вывели второй элемент списка

Таким образом, мы можем пробежаться по всем элементам списка ещё и так:

Умеет создавать свою копию

КопияСписка = Список.Скопировать(); // сделали копию списка // теперь можем смело менять КопияСписка // при этом исходный список меняться не будет КопияСписка[0].Значение = 123456;

Умеет превращаться в массив

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

Подводим итог

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

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

Пройдите тест

Необходимо ввести от пользователя 5 чисел, найти наибольшее и наименьшее из них и вывести их пользователю. В решении должен использоваться список значений.

Язык 1С в примерах.

Список значений в языке 1С 8.3, 8.2 (в примерах)

Вступайте в мою группу помощник программиста.

В ней мы обсуждаем программирование в 1С.

2017-12-18T22:27:10+00:00Дата Если Массивы Математика Процедуры Строки Циклы

Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие

СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

См. урок для начинающих по списку значений в 1С

Полный синтаксис (нажмите, чтобы раскрыть)

Оглавление (нажмите, чтобы раскрыть)

Список значений в языке 1С 8.3, 8.2 (в примерах)

Дата Если Массивы Математика Процедуры Строки Циклы

Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие

СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

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

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Код Икс Пи :: Лучшие IT-решения для бизнеса

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

Результат выполнения обработки будет примерно следующим

Отметка элементов флажками вынесена в другую кнопку, чтобы не было мешанины на экране

Массив в платформе 1С 8.3 это самая простая универсальная коллекция значений.

Что такое Массив?

Создать массив можно при помощи конструктора Новый

Новый Массив (<КоличествоЭлементов1>…<КоличествоЭлементовN>)

Двумерный массив из 6 элементов (три строки, два столбца).

В отличие от таблиц значений 1С, работать с массивами можно как в режим тонкого клиента, так и в режим толстого клиента.

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

Пустой одномерный массив 1С 8.3

Обращаться к элементу массива можно посредством индекса. Делается это с помощью оператора «квадратные скобки».

Как видите, элементы массива могут иметь разные типы ( в том числе ссылочные).

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

Индекс внутри скобок не должен превышать общего количества элементов минус один (т.к. индекс начинается с нуля). Если мы напишем такой код:

То при его выполнении, возникнет ошибка «Индекс находится за границами массива»

Индекс находится за границами массива

Хоть мы и указали у конструктора массивов в скобках значение 5, но обращаться может только до 4 индекса, поскольку нумерация индексов начинается с нуля.

Перебор элементов массива

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

Но чаще необходимо прочитать каждый элемент массива в цикле. Для этого в теле цикла нужно обойти индексы от первого до последнего. Сделать это можно при помощи цикла Для…Цикл.

Или с помощью цикла Для каждого … Цикл

Где в переменной ЭлМассив для каждой итерации содержится соответствующее значение элемента массива.

Количество элементов массива

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

Второй способ считается более правильным.

Добавление элементов массива

Добавить элемент массива можно с помощью методов Добавить() и Вставить(). Первый метод добавляет элемент в конец массива, а второй вставляет элемент в нужный индекс массива.

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

Добавление элементов массива

Многомерный массив

Многомерным массивом в языке программирования 1С называется массив, элементами которого являются массивы. Если одномерный массив создавался посредством конструктора с одним параметром, то в многомерном массиве может быть два и больше параметров.

МассивМн1 = Массив(3,2,5);

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

Например, создадим двумерный массив:

Вывод двумерного массива

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


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

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


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

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

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

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

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

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

Описание типа 1С

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

Выше показано самое простое использование описания типов. Для числа, строки и даты мы можем использовать Квалификаторы. Это общие объекты – КвалификаторыЧисла, КвалификаторыСтроки, КвалификаторыДаты. Они также задаются при помощи конструктора Новый и имеют следующие синтаксисы.

Квалификатор числа 1С

Для числа будет следующий синтаксис квалификатора.

Новый КвалификаторыЧисла(<ЧислоРазрядов>, <ЧислоРазрядовДробнойЧасти>, <ДопустимыйЗнак>)

Где: ЧислоРазрядов – общее число разрядов;

ЧислоРазрядовДробнойЧасти – число разрядов после запятой;

ДопустимыйЗнак – системное перечисления (значения Любой, Неотрицательный).

Например, задать неотрицательно число с 6 разрядами и 2 дробными разрядами будет так:

Квалификатор строки 1С

Для строки будет следующий синтаксис квалификатора.

Новый КвалификаторыСтроки(<ДлинаСтроки>, <ДопустимаяДлина>)

Где: ДлинаСтроки – длина задаваемой строки

ДопустимаяДлина – системное перечисление ДопустимаяДлина, которое определяет, будет строка переменная или фиксированная.

Например, задать строку длинной 10 символов фиксированной длины нужно так:

Обратите внимание, что КвалификаторСтроки задаем третьим параметром.

Квалификатор даты 1С

Для даты будет следующий синтаксис квалификатора.

Где ЧастиДаты – системное перечисление, с тремя значениями Время, Дата, ДатаВремя.

Например, задать дату, которая будет иметь формат времени нужно так:

Обратите внимание, что КвалификаторДаты задаем третьим параметром.

Общий вариант синтаксиса с использование типов выглядит так:

Новый ОписаниеТипов(<Типы>, <КвалификаторыЧисла>, <КвалификаторыСтроки>, <КвалификаторыДаты>, <КвалификаторыДвоичныхДанных>)

Массив типов в описание типов

Кроме использования одного типа в синтаксисе описания типов, можно использовать массив типов, например, сделаем колонку таблицы значений, у которая может принимать значения примитивных типов Строка, Число, Дата, Булево. Для этого нужно все типы перечислить в массиве, причём типы должны быть не в виде строк, как мы делали ранее, а в виде значений типа Тип.

Также можно «собрать» массив из ссылочных типов, например из справочников:

Описание типов на основании описания типов

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

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

Теперь нам нужно новое описание типов, в котором будут такие типы как Число, Строка и Дата (тип Булево нам не нужно).

Для этого мы можем использовать следующий конструктор описания типов:

Новый ОписаниеТипов(<ИсходноеОписаниеТипов>, <ДобавляемыеТипы>, <ВычитаемыеТипы>, <КвалификаторыЧисла>, <КвалификаторыСтроки>, <КвалификаторыДаты>, <КвалификаторыДвоичныхДанных>)

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

Давайте продолжим код выше:

В этом код в новое описание типов, мы добавили тип Дата, и вычли тип Булево.



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

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


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

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

Коллекции значений могут:

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

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

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

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

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

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

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

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

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

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

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

Массив

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

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

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

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

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

Структура

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

COMSafeArray

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для отправки комментария вам необходимо авторизоваться.

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

Читайте также: