Отличие Структуры от Соответствия 1С
Соответствие и структура очень близкие по сути коллекции.
Соответствие – это коллекция пар ключ и значение.
Структура – это коллекция пар ключ и значение.
Как видите, из определений объектов не отличишь структуру от соответствия, а разница между ними есть и находится в свойстве Ключ. Ключ в структуре может быть только строкой, а в соответствии может быть любым типом.
Что понимается под словом «Ключ»? Ключ – это ключевое поле которое не может иметь двух одинаковых значений - является уникальным в пределах коллекции. Т.е. если мы попытаемя в структуру имеющую ключ "Номенклатура" и значение "Диван" поместить такой же ключ, но с значением "Кресло", то программа просто заменит старое значение "Диван" на новое "Кресло", а не добавит ещё один ключ "Номенклатура" со значением "Кресло".
Основное использование объекта типа "Структура":
Этот объект часто используется в качестве способа передачи параметров в процедуры и функции.
ВыбраннаяНоменклатура = Новый Структура;
ВыбраннаяНоменклатура.Вставить(«Шифр», Номенклатура.Шифр);
ВыбраннаяНоменклатура.Вставить(«НоменклатурнаяГруппа», Номенклатура.НоменклатуaрнаяГруппа);
ДобавитьНоменклатуруВТЧТовары(ВыбраннаяНоменклатура);
Основное использование объекта типа "Соответствие":
Имя типа объекта оправдывает свое название, соответственно можно связывать два разных объекта системы, что позволяет избежать ипользования ТЗ с двумя колонками.
СоответствиеНоменклатур = Новый Соответствие;
СоответствиеНоменклатур.Вставить(НашаНоменклатура, НоменклатураКонтрагента);
У этих объектов одинаковые методы для добавления и удаления элементов, но разные для получения.
У структуры имеется метод "Свойство" который проверяет есть ли такой ключ в коллекции и возвращает в переменную полученное значение. Если ключа нет, то возвращается Неопределено. При этом метод является функцией и возвращает Булево(Истина или Ложь)
НоменклатурнаяГруппа = Неопределено;
КлючСуществует = ВыбраннаяНоменклатура.Свойство("НоменклатурнаяГруппа", НоменклатурнаяГруппа);
В Соответствии для этого есть метод "Получить" в параметрах которого передается ключ парное значение которого мы ищем. Т.е. нет отдельной функции для проверки, но если ключ не найден, то возвращается Неопределено, что и можно использовать для этой же цели(текст изменен, благодаря замечаниям в комментариях).
НоменклатураКонтрагента = СоответствиеНоменклатур.Получить(НашаНоменклатура);
Комментарии
Проблема в том, что каждый раз он видит массив, как новый, хотя его значения такие же, как в массиве уже существующего ключа Соответствия.
Соответствие можно циклом Для каждого обойти, как и любую коллекцию.
И запросто узнать все ключи.
Наоборот, в структуре - строка, в соответствии - произвольный тип
RSS лента комментариев этой записи