Чем структура отличается от соответствия 1с
Соответствие в языке программирования 1С чем-то похоже на Структуру, это тоже коллекция пар Ключ и значение. Но в отличие от Структуры, в Соответствие, чтобы получить значение по определенному ключу, нужно обращаться не как к свойству объекта, а через квадратные скобки, и в качестве ключа можно использовать значение любого типа.
Структура: Структура1.Ключ1
Соответствие можно создать на всех видах клиентов и в любом контексте. Сериализируется, т.е. можно передать переменную с типом соответствие с клиентского контекста на серверный.
Хоть и в ключ и значение соответствия можно записать переменные любого типа, использование типов в этом случае очень сильно зависит от контекста и от вида клиента: мы не можем в клиентском задать в ключ или значение, тип которого работает только в серверном контексте (например, ДокументОбъект.<>).
Новое соответствие создается при помощи конструктора Новый.
Соответствие1 = Новый Соответствие;
Для того, чтобы добавить новый элемент соответствия, необходимо использовать метод Вставить, который имеет следующий синтаксис:
Вставить(<Ключ>, <Значение>)
Параметр «Ключ» может иметь любой тип! Это очень важное свойство, таким образом, с помощью коллекции Соответствие можно в процессе работы устанавливать соответствие любых объектов с любыми объектами.
Простой пример работы с соответствием:
Для того чтобы поменять значение какого-нибудь элемента, который соответствует определенному ключу, достаточно для этого ключа присвоить новое значение.
Поменять имеющееся значение можно, также используя квадратные скобки.
Обход соответствия 1С
Обходить соответствие можно с помощью цикла Для каждого…Цикл.
Безошибочное получении значения соответствия 1С
Как Вы уже поняли, для того чтобы получить значение элемента соответствия, мы используем квадратные скобки. Но иногда возможны ситуации, когда применение квадратных скобок неосуществимо. В таких случаях мы можем использовать метод Получить, который возвращает любое значение, соответствующее ключу. Если такого ключа нет, то вернется значение Неопределено
Рассмотрим работу данного метода на соответствии с датами в качестве ключей.
Статьи о других универсальных коллекциях значений в 1С
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Вступайте в мои группы:
One thought on “ Учимся работать с соответствием в 1С 8.3 ”
Соответствие и структура очень близкие по сути коллекции.
Соответствие – это коллекция пар ключ и значение.
Структура – это коллекция пар ключ и значение.
Как видите, из определений объектов не отличишь структуру от соответствия, а разница между ними есть и находится в свойстве Ключ. Ключ в структуре может быть только строкой, а в соответствии может быть любым типом.
Что понимается под словом «Ключ»? Ключ – это ключевое поле которое не может иметь двух одинаковых значений - является уникальным в пределах коллекции. Т.е. если мы попытаемя в структуру имеющую ключ "Номенклатура" и значение "Диван" поместить такой же ключ, но с значением "Кресло", то программа просто заменит старое значение "Диван" на новое "Кресло", а не добавит ещё один ключ "Номенклатура" со значением "Кресло".
Основное использование объекта типа "Структура":
Этот объект часто используется в качестве способа передачи параметров в процедуры и функции.
Основное использование объекта типа "Соответствие":
Имя типа объекта оправдывает свое название, соответственно можно связывать два разных объекта системы, что позволяет избежать ипользования ТЗ с двумя колонками.
У этих объектов одинаковые методы для добавления и удаления элементов, но разные для получения.
У структуры имеется метод "Свойство" который проверяет есть ли такой ключ в коллекции и возвращает в переменную полученное значение. Если ключа нет, то возвращается Неопределено. При этом метод является функцией и возвращает Булево( Истина или Ложь )
В Соответствии для этого есть метод "Получить" в параметрах которого передается ключ парное значение которого мы ищем. Т.е. нет отдельной функции для проверки, но если ключ не найден, то возвращается Неопределено, что и можно использовать для этой же цели(текст изменен, благодаря замечаниям в комментариях).
Комментарии
Ольга, как я понимаю у Вас задача быстро сравнивать Списки значений, но соответствие здесь не поможет, т.к. программа при проверки уникальности ключа будет сравнивать не значения списка, а ссылку(указатель) на список. Если вы создадите два одинаковых списка значений и вставите их в соответствие, то программа их расположит как два разных ключа - 2 значения, но повторное добавление этих списков значений в соответствие не даст дублирования и количество значений так и останется 2.Скажите, пожалуйста, как в ключ Соответствия засунуть список значений (массив), и потом искать этот ключ, сравнивая ключ как сам список значений, а не какой-то адрес (хэш). Какую структуру данных использовать для ключа?
Проблема в том, что каждый раз он видит массив, как новый, хотя его значения такие же, как в массиве уже существующего ключа Соответствия.
Соответствие и структура очень близкие по сути коллекции.
Соответствие – это коллекция пар ключ и значение.
Структура – это коллекция пар ключ и значение.
Как видите, из определений объектов не отличишь структуру от соответствия, а разница между ними есть и находится в свойстве Ключ. Ключ в структуре может быть только строкой, а в соответствии может быть любым типом.
Что понимается под словом «Ключ»? Ключ – это ключевое поле которое не может иметь двух одинаковых значений - является уникальным в пределах коллекции. Т.е. если мы попытаемя в структуру имеющую ключ "Номенклатура" и значение "Диван" поместить такой же ключ, но с значением "Кресло", то программа просто заменит старое значение "Диван" на новое "Кресло", а не добавит ещё один ключ "Номенклатура" со значением "Кресло".
Основное использование объекта типа "Структура":
Этот объект часто используется в качестве способа передачи параметров в процедуры и функции.
Основное использование объекта типа "Соответствие":
Имя типа объекта оправдывает свое название, соответственно можно связывать два разных объекта системы, что позволяет избежать ипользования ТЗ с двумя колонками.
У этих объектов одинаковые методы для добавления и удаления элементов, но разные для получения.
У структуры имеется метод "Свойство" который проверяет есть ли такой ключ в коллекции и возвращает в переменную полученное значение. Если ключа нет, то возвращается Неопределено. При этом метод является функцией и возвращает Булево( Истина или Ложь )
В Соответствии для этого есть метод "Получить" в параметрах которого передается ключ парное значение которого мы ищем. Т.е. нет отдельной функции для проверки, но если ключ не найден, то возвращается Неопределено, что и можно использовать для этой же цели(текст изменен, благодаря замечаниям в комментариях).
Комментарии
Ольга, как я понимаю у Вас задача быстро сравнивать Списки значений, но соответствие здесь не поможет, т.к. программа при проверки уникальности ключа будет сравнивать не значения списка, а ссылку(указатель) на список. Если вы создадите два одинаковых списка значений и вставите их в соответствие, то программа их расположит как два разных ключа - 2 значения, но повторное добавление этих списков значений в соответствие не даст дублирования и количество значений так и останется 2.Скажите, пожалуйста, как в ключ Соответствия засунуть список значений (массив), и потом искать этот ключ, сравнивая ключ как сам список значений, а не какой-то адрес (хэш). Какую структуру данных использовать для ключа?
Проблема в том, что каждый раз он видит массив, как новый, хотя его значения такие же, как в массиве уже существующего ключа Соответствия.
В данной статье пойдет речь о том, какие коллекции есть во встроенном языке 1С, их особенности и для чего они применяются.
В материале освещены сразу два вопроса собеседования программиста 1С:
- Чем отличается структура от соответствия?
- Можно ли сделать запрос по таблице значений?
Разработчику во встроенном языке доступны следующие объекты, описывающие коллекции:
Массив
Объект описывает коллекцию значений массива. У каждого элемента есть индекс. В 1С можно создавать многомерные массивы, например так:
В массиве можно искать элементы методом Найти(), но поскольку у массива нет индексов данный поиск выполняется не быстро. Метода сортировки массива разработчики 1С не добавили. Возможно, это сделано не просто так, т.к. сортировать можно другие коллекции
Массивы используются для передачи параметров в запрос, для выгрузки колонки таблицы значений, могут служить источником для списка значений.
Фиксированный массив
Тот же массив, но его элементы нельзя изменить, т.е. у него есть только методы Получить(), Найти(), ВГраница() и Количество(). Создается на основе обычного массива.
Данный объект как правило используется в свойствах интерфейсных объектов (элементов управления)
Список значений
Список значений можно представить в качестве следующей таблицы значений:
Как видно из структуры объекта, в поле “Значение” может быть любой объект.
Данный объект, в отличие от массива, уже содержит методы сортировки как по полю Значение, так и по полю Представление. Список значений можно заполнить элементами массива, используя метод ЗагрузитьЗначения().
Списки используются для передачи параметров в запрос, в качестве объекта сравнения в СКД и построителе, а также в отборах в интерфейсе.
Данный объект может быть отображен в интерфейсе, кроме того он имеет методы позволяющие показать диалог установки отметок в списке, диалог выбора значения из списка.
Структура
Структура представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка, т.е. ключом не может выступать строка “123ключ”. К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.
Пары Ключ-значение можно обойти циклом Для каждого … Из … Цикл, проверить существует ли свойство(ключ) структуры можно методом Свойство().
Структура используется обычно для хранения небольшого количества значений, каждое из которых имеет некоторое имя.
Соответствие
Соответствие как и структура представляет собой коллекцию пар КлючИЗначение. При этом, у соответствия в качестве ключа может выступать любое значение! Рекомендуется, чтобы в качестве ключа выступало значение примитивного типа или другого типа, значение которого может только присваиваться, но не может менять свое содержимое. Еще одной особенность соответствия является то, что это индексированная коллекция, т.е. поиск значения по ключу осуществляется очень быстро.
Пары Ключ-значение можно обойти циклом Для каждого … Из … Цикл.
Соответствие обычно используется в тех случаях, когда необходимо заполнить таблицу соответствия одного значения другому, причем размеры этой таблицы могут быть достаточно большими. Также очень удобно использовать соответствие в качестве кэша из-за высокой скорости поиска в нем.
Таблица значений
Таблица значений предназначена для хранения значений в табличном виде. Все основные операции с таблицей производятся именно через этот объект. Он позволяет манипулировать строками таблицы значений и предоставляет доступ к коллекции колонок. Колонки могут быть различных типов (в том числе множественных).
У таблицы значений есть метод Сортировать(), с помощью которого можно сортировать таблицу сразу по нескольким колонкам. С помощью метода Итог() можно сразу получить сумму колонки.
Причем, в запросе необходимо сразу поместить выбранную таблицу во временную, а после этого выполнять действия с ней.
В управляемом приложении данный объект доступен только на сервере! Другими словами, попытка создать на клиенте равно как и передать таблицу значений с сервера на клиент приведет к ошибке.
Читайте также: