Поделитесь в соцсетях

Отличие Структуры от Соответствия 1С

Содержание[Убрать]

Отличие Структуры от Соответствия 1С

Соответствие и структура очень близкие по сути коллекции.
Соответствие – это коллекция пар ключ и значение.
Структура – это коллекция пар ключ и значение.

 


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

Что понимается под словом «Ключ»? Ключ – это ключевое поле которое не может иметь двух одинаковых значений - является уникальным в пределах коллекции. Т.е. если мы попытаемя в структуру имеющую ключ "Номенклатура" и значение "Диван" поместить такой же ключ, но с значением "Кресло", то программа просто заменит старое значение "Диван" на новое "Кресло", а не добавит ещё один ключ "Номенклатура" со значением "Кресло".

Основное использование объекта типа "Структура":


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

ВыбраннаяНоменклатура = Новый Структура;

ВыбраннаяНоменклатура.Вставить(«Шифр», Номенклатура.Шифр);
ВыбраннаяНоменклатура.Вставить(«НоменклатурнаяГруппа», Номенклатура.НоменклатуaрнаяГруппа);
ДобавитьНоменклатуруВТЧТовары(ВыбраннаяНоменклатура);

Основное использование объекта типа "Соответствие":


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

СоответствиеНоменклатур = Новый Соответствие;

СоответствиеНоменклатур.Вставить(НашаНоменклатура, НоменклатураКонтрагента);


У этих объектов одинаковые методы для добавления и удаления элементов, но разные для получения.

У структуры имеется метод "Свойство" который проверяет есть ли такой ключ в коллекции и возвращает в переменную полученное значение. Если ключа нет, то возвращается Неопределено. При этом метод является функцией и возвращает Булево(Истина или Ложь)

НоменклатурнаяГруппа = Неопределено;

КлючСуществует = ВыбраннаяНоменклатура.Свойство("НоменклатурнаяГруппа", НоменклатурнаяГруппа);

 

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

 

НоменклатураКонтрагента = СоответствиеНоменклатур.Получить(НашаНоменклатура);

Комментарии   

+1 #7 Администратор 28.12.2016 15:00
Ольга, как я понимаю у Вас задача быстро сравнивать Списки значений, но соответствие здесь не поможет, т.к. программа при проверки уникальности ключа будет сравнивать не значения списка, а ссылку(указатель) на список. Если вы создадите два одинаковых списка значений и вставите их в соответствие, то программа их расположит как два разных ключа - 2 значения, но повторное добавление этих списков значений в соответствие не даст дублирования и количество значений так и останется 2.
-1 #6 Ольга 02.11.2016 20:02
Скажите, пожалуйста, как в ключ Соответствия засунуть список значений (массив), и потом искать этот ключ, сравнивая ключ как сам список значений, а не какой-то адрес (хэш). Какую структуру данных использовать для ключа?

Проблема в том, что каждый раз он видит массив, как новый, хотя его значения такие же, как в массиве уже существующего ключа Соответствия.
0 #5 Влад 21.10.2016 11:06
Не обязательно точно знать ключ соответствия.
Соответствие можно циклом Для каждого обойти, как и любую коллекцию.
И запросто узнать все ключи.
0 #4 Pavlo 10.12.2013 02:40
На счет точно знать есть ли у соответствия ключ, это да. Но добавьте чтобы было понятно (немного получается, что знать нужно и ошибиться нельзся, что в случае не нахождения по сути ключа, вернет Неопределно) поэтому это тоже свое рода проверка на наличие ;)
+3 #3 Ильдарка 30.01.2013 12:41
Все понятно,спасибо))
-1 #2 Administrator 07.08.2010 06:16
Спасибо Fox за замечание, исправил.
+22 #1 Guest 01.08.2010 18:29
"Ключ в соответствии может быть только строкой, а в структуре может быть любым типом"
Наоборот, в структуре - строка, в соответствии - произвольный тип

Недостаточно прав для комментирования