Структура против (VS) Соответствие

Иногда встает вопрос, что лучше использовать, а чаще всего в стандартных конфигурациях 1С и их партнеров при обновлении может, происходит преобразование данных в другие объекты метаданных и почему то они строят структуру, где ключом является код объекта?! А там же может быть значение, которое начинается на цифру и сразу же выходит ошибка.

Таблица сравнения построена по версии справки из Конфигуратора:

Структура

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

Элементы коллекции:КлючИЗначение

Свойства: ()

Возможно обращение к значению элемента посредством оператора […]. В качестве аргумента передается значение ключа элемента.

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.

Методы:

Вставить (Insert)
Количество (Count)
Очистить (Clear)
Удалить (Delete)

Свойство (Property)

Получить (Get)

Конструкторы:

По ключам и значениям

По умолчанию

Описание:

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

Представляет доступ к соответствию.

Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}.

Имя типа XDTO: Structure

Имя типа XDTO: Map

Может использоваться в реквизитах управляемой формы.

Пример:

Запись = Новый Структура;

Запись = Новый Соответствие;

Запись.Вставить(«Ключ»,«Значение»);

Кроме этого: Структура упорядочивает элементы при добавлении, а соответсвие нет.

Вернемся к теме:

Для «Структура» ключ должен быть введен по всем правилам объявления переменных, а «Соответствие» нет.

Можно просто заменить тип переменной и заменить метод «Свойство» на «Получить». Обычно этого достаточно.

Но бывают и неожиданные результаты при использовании «Соответствие».

Например, платформа даёт добавить значение с ключом = Неопределенно, а вот считать нельзя, так как по факту запись не была добавлена, но и ошибку не выдал.

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

Перем мСтруктура;

Перем мСоответствие;  

 

Процедура КнопкаВыполнитьНажатие(Кнопка)

        Тест =«А500»;

       

        мСтруктура.Очистить();

        тДата = ТекущаяДата();

        Для А =1По500000Цикл

               Стр =«А»+Формат(А,«ЧГ=»);

               ВставитьИПроверить(мСтруктура, Стр, Стр);

        КонецЦикла;           

        Сообщить(«Структура — «+(ТекущаяДата() тДата));

        ВставитьИПроверить(мСтруктура, Тест, Тест);

       

        мСоответствие.Очистить();

        тДата = ТекущаяДата();

        Для А =1По500000Цикл

               Стр =«А»+Формат(А,«ЧГ=»);

               ВставитьИПроверить(мСоответствие, Стр, Стр);

        КонецЦикла;           

        Сообщить(«Соответствие — «+(ТекущаяДата() тДата));

        ВставитьИПроверить(мСоответствие, Тест, Тест);

 

        ВывестиНаФорму()

КонецПроцедуры

 

 

Процедура ВставитьИПроверить(Список, Ключ, Значение);

        //получаем тип

        мТип = ТипЗнч(Список);

       

        //проверка возможно добавить или нет

        Попытка

               Список.Вставить(Ключ, Значение);

        Исключение

               Сообщить(«»+ мТип +«: Не возможно добавить ключ [«+ Значение +«].»);   

               Возврат;

        КонецПопытки;

       

        //проверка чтения

        Попытка

               ЕслиНЕ((мТип = Тип(«Соответствие»)ИНЕ Список.Получить(Ключ)=Неопределено)

                               ИЛИ(мТип = Тип(«Структура»)ИНЕ Список.Свойство(Ключ)=Неопределено))Тогда

                       Сообщить(«»+ мТип +«: Выполнено неявное преобразование типов и/или данных ключа [«+ Значение +«].»)   

               КонецЕсли;

        Исключение

               Сообщить(«»+ мТип +«: Невозможно получить значение по ключу [«+ Значение +«].

                                      |              Возможно было выполнено неявное преобразование типов и/или данных ключа.»)   

        КонецПопытки;

КонецПроцедуры

 

Процедура ОсновныеДействияФормыПроверка(Кнопка)

        мСсылка = Справочники.Валюты.ПустаяСсылка();

       

        мСтруктура.Очистить();

        // добавление новый элементов в Структуру

        ВставитьИПроверить(мСтруктура,«Ключ1»,«Ключ1»);

        ВставитьИПроверить(мСтруктура,«1Ключ»,«1Ключ»);

        ВставитьИПроверить(мСтруктура, мСсылка,«Справочники.Валюты.ПустаяСсылка()»);

        ВставитьИПроверить(мСтруктура, табСтруктура,«ТаблицаЗначений»);

        ВставитьИПроверить(мСтруктура,Неопределено,«Неопределено»);

        ВставитьИПроверить(мСтруктура,null,«null»);

       

        мСоответствие.Очистить();

        // добавление новый элементов в Соответствие

        ВставитьИПроверить(мСоответствие,«Ключ1»,«Ключ1»);

        ВставитьИПроверить(мСоответствие,«1Ключ»,«1Ключ»);

        ВставитьИПроверить(мСоответствие, мСсылка,«Справочники.Валюты.ПустаяСсылка()»);

        ВставитьИПроверить(мСоответствие, табСоответствие,«ТаблицаЗначений»);

        ВставитьИПроверить(мСоответствие,Неопределено,«Неопределено»);

        ВставитьИПроверить(мСоответствие,null,«null»);

       

        ВывестиНаФорму()

КонецПроцедуры

 

Процедура ВывестиНаФорму()

        табСтруктура.Очистить();

        // выводим результат на форму

        ДляКаждого Стр Из мСтруктура Цикл

               нСтр                   = табСтруктура.Добавить();

               нСтр.Ключ              = Стр.Ключ;

               нСтр.Значение = Стр.Значение;

        КонецЦикла;   

        ЭлементыФормы.табСтруктура.СоздатьКолонки();

       

        табСоответствие.Очистить();

        ДляКаждого Стр Из мСоответствие Цикл

               нСтр                   = табСоответствие.Добавить();

               нСтр.Ключ              = Стр.Ключ;

               нСтр.Значение = Стр.Значение;

        КонецЦикла;   

        ЭлементыФормы.табСоответствие.СоздатьКолонки();

       

КонецПроцедуры;

 

мСтруктура =Новый Структура;

мСоответствие =Новый Соответствие;  

 

табСтруктура.Колонки.Добавить(«Ключ»);

табСтруктура.Колонки.Добавить(«Значение»);

 

табСоответствие.Колонки.Добавить(«Ключ»);

табСоответствие.Колонки.Добавить(«Значение»);

Лог выполнения:

Структура: Не возможно добавить ключ [1Ключ].

Структура: Не возможно добавить ключ [Справочники.Валюты.ПустаяСсылка()].

Структура: Не возможно добавить ключ [Неопределено].

Структура: Не возможно добавить ключ [null].

Соответствие: Выполнено неявное преобразование типов и/или данных ключа [Неопределено].

Прошу обратить внимание: Что ТаблицаЗначений при добавлении в Структуру было преобразовано к строке «ТаблицаЗначений».

Последний раз у меня возникла такая ситуация при обновлении 1С:Консолидация ПРОФ с 1.3.3.7 (1.3.4.1) на 2.0.1.4 (2.0.2.6)
Строилась «Структура» по коду справочника «Операнды показателей».
Исправляется 1 строкой в Общих модулях.УправлениеОтчетами строка 3622.
«СтруктураПолей=Новый Структура;» заменить на «СтруктураПолей=Новый Соответствие;»

51 Comments

  1. Nykyanen

    Последний раз у меня возникла такая ситуация при обновлении 1С:Консолидация ПРОФ с 1.3.3.7 (1.3.4.1) на 2.0.1.4 (2.0.2.6)

    Строилась «Структура» по коду справочника «Операнды показателей».

    Исправляется 1 строкой в Общих модулях.УправлениеОтчетами строка 3622.

    «СтруктураПолей=Новый Структура;» заменить на «СтруктураПолей=Новый Соответствие;»

    Reply
  2. Поручик

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

    Reply
  3. Nykyanen

    (2) Поручик, как ни странно я тоже.

    Но надо знать органичения и чем можно заменить!

    Reply
  4. awk

    (0) А почему не сравнить самолет с паровозом? Почему паровоз не летает? А почему самолет столько груза не перевозит?

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

    Кстати, попробуй передать соответствие на сервер (в виде параметра метода) — удивишься. По крайней мере вплоть до 8.2.15.310 такое не прокатывало.

    Очень чешется влепить минус за такое сравнение.

    Reply
  5. Nykyanen

    (4) awk, спасибо за совет надо попробовать.

    А если с клиента вызать функцию, которая выполняется на сервере — функция возвращает соответсвие.

    Проблем не было.

    Да, кстати еще есть «ФиксированноеСоответствие» и «ФиксированнаяСтруктура», я как то про них совсем забыл 🙂

    Reply
  6. Magister

    Лучше бы про производительность получения/вставки значения рассказали…

    Reply
  7. khaoos

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

    Reply
  8. khaoos

    (6) Magister, производительность чтения в виде результатов теста есть здесь: http://infostart.ru/public/105104/

    Reply
  9. Nykyanen

    (7) khaoos, позже статью дополню.

    Еще не написал, что структура упорядочивает элементы, а соответсвие нет.

    Reply
  10. Hany

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

    А у структуры — только строковым.

    При разработке как раз этот момент и нужно проанализировать, когда не знаешь что использовать — структуру или соответствие.

    Reply
  11. vladismi

    (2) Поручик, Структура МЕНЕЕ универсальный объект: Ключ -только строка, смотри (10).

    Reply
  12. kereo

    (1) Согласен c awk, это разные объекты с разным назначением.

    Строилась «Структура» по коду справочника «Операнды показателей».

    Может просто надо было коды поменять, а не конфигурацию менять?

    Reply
  13. Nykyanen

    (12) kereo, менять коды не вариант.

    Так как на этих кодах справочника построены формулы расчета.

    Но и это не самое страшное, видать для повышения скорости работы почти в каждом справочники, есть реквизит типа ХранилищеЗначения, которое в себе хранит копию почти всех реквизитов объекта + какие-то промежуточные расчеты.

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

    Возможно, где то еще есть ХранилищеЗначения на ХранилищеЗначения на ХранилищеЗначения, но дальше углубляться не стал.

    Так как их надо будет обновлять. А это не просто, всё-таки это 1С: Консолидация.

    Reply
  14. ildarovich

    Мне кажется неправильным исследовать структуры данных языка «структура» и «соответствие» как черные ящики. У Шекли, по-моему, был рассказ, как инопланетные ученые исследуют попавшие к ним из от 1С космоса артефакты, приходя к самым разнообразным выводам, формируя научные школы и направления. В нашем случае назначение структур данных объяснить проще. Для этого нужно привлечь историю развития языков программирования и рекомендации разработчиков.

    «Структура» как структура данных появилась очень давно. В PL/1 уже точно была. Тем, кто программировал на PL/1, Pascal, C и тому подобных языках, объяснять назначение «структуры» точно не нужно. Она позволяет манипулировать набором разноименных свойств объектов как единым целым. «Структура» — это прародитель объекта в эпоху до появления ООП. Поэтому, кажется, мыслью разработчиков было просто реализовать в платформе этот механизм универсальных языков программирования. Соответствие — это массив с произвольным типом индекса (hash-map). То есть структура данных, предназначенная для хранения большого количества в принципе однородных данных с возможностью их быстрого извлечения с использованием хеш-таблиц.

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

    Reply
  15. frc

    (2) Поручик,

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

    И то, и другое — можно пользовать как Структура[ИмяКлюча], Соответствие[ИмяКлюча].

    Так что — может быть, кому-то это откроет глаза на Структуру и Соответствие, их сравнения и «универсальности» 🙂

    Reply
  16. frc

    (14) ildarovich,

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

    И струткура, и Соответстиве работают примерно одинаковой скоростью.

    «Структура» как структура данных появилась очень давно

    какое отношение имеет Структура от 1С к чему либо еще, кроме 1С? И вообще — кто еще при «а мы пойдем своим путем» сравнивает типы данных в 1С с тем, что «появилось очень давно»? 🙂

    Reply
  17. bomba

    (14)

    Исчерпывающе вполне. Жаль плюсануть можно лишь раз.

    Reply
  18. bomba

    (16) Не позорьтесь публично. Или вы наивно полагаете, что 1С изобрела типы Структура и Соответствие?

    Reply
  19. Nykyanen

    Добавим масла в огонь Ж-)

    Например, в 1С: Консолидации коды справочников заполнялись автоматически при настройки связей с 1С: Бухгалтерия КОРП. Неужели они сами не проверяли, как работает программа?!

    А может спецы в 1С менее грамотные?! Или многое делают на скорую руку?!

    Reply
  20. frc

    (18) bomba,

    Или вы наивно полагаете

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

    Reply
  21. frc

    (18) bomba,

    не позорьтесь сами натягиванием 1С на «мировой опыт».

    Выйдет боком со смещенным центром 🙂

    Reply
  22. Поручик

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

    Reply
  23. frc

    (22) Поручик,

    у них сейчас длаже платформу студенты пишут

    Reply
  24. Nykyanen

    (23) frc, (22) Поручик,

    Студенты тоже разные бывают.

    Есть знакомые у которых 15 лет опыта 1С за плечами, но порой такое кодят, МРАК!!!

    Благо дальше контор не уходит.

    Скорее всего, делают на скорую руку.

    Надо же работу франчайзи оставлять.

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

    Reply
  25. frc

    (24)

    но порой такое кодят, МРАК!!!

    МРАК такое не кодит 🙂

    Reply
  26. frc

    (14) ildarovich,

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

    История и развитие языков программирования, а также накопленный опыт построения БД, и все прочие опыты — и близко с 1С не стояли.

    Рекомендаций разработчиков (каких? от 1С?), а также разъяснений, что они там понаделали — тоже практически нет.

    Reply
  27. Трактор

    Зачем написана статья? Не понятно.

    Два внешне похожих объекта имеют коренные различия. Кто стукнется о различия тот поймёт их. Кто не стукнется тому они не важны. Из статьи различия трудно понять. ИМХО статья бесполезна.

    Reply
  28. Nykyanen

    (27) frc,

    Если я правильно понимаю (если не прав поправьте меня):

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

    Пример (можете поставить точку останова и внимательно проверить):

    мас = Новый Массив; мас2 = Новый Массив;

    Структура.Вставить(мас, «Массив»);

    Если Структура.Свойство(мас) И Структура.Свойство(мас2) И Структура.Свойство(«ТаблицаЗначений») Тогда

    Сообщить(«Найдено»);

    Иначе Сообщить(«Не найдено»);

    КонецЕсли;

    2-ой пример:

    вал = Справочники.Валюты.НайтиПоНаименованию(«Руб»);

    Структура.Вставить(вал.ПолучитьОбъект(), «Объект»);

    Если Структура.Свойство(вал) И Структура.Свойство(«Руб «) Тогда Сообщить(«Найдено»);

    Иначе Сообщить(«Не найдено»);

    КонецЕсли;

    3-ий пример (добавил новую валюту с именем «1Руб»):

    вал = Справочники.Валюты.НайтиПоНаименованию(«1Руб»);

    Структура.Вставить(вал.ПолучитьОбъект(), «Объект»);

    — выдаст сразу ошибку

    Reply
  29. Nykyanen

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

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

    Reply
  30. Nykyanen

    (27) frc, еще пару слов про соответсвие.

    Соответствие хранит не значение ключа, а ссылку на него.

    Пример:

    вал = Справочники.Валюты.НайтиПоКоду(«643»).ПолучитьОбъект();

    С = Новый Соответствие;

    С.Вставить(вал, «643»);

    вал.код = «642»;

    вал.Записать();

    Сообщить(«Код ключа » + вал.Код + «, код значения » + С.Получить(вал));

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

    Reply
  31. Nykyanen

    А писал статью так как понятно мне.

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

    В ближайшие время статью дополню сообщениями из комментариев.

    Reply
  32. FedorovEvg

    Кому нужна эта статья ? Не совсем понял, почему автор взялся сравнивать структуру и соответствие, можно сравнить одномерный массив и список значений и т.д. Практически везде в типовых используется структура, особенно это видно при проведении или сохранении объекта. Порадовали сообщения, что 1с выдумала все сама, а не использовала опыт предыдущих языков программирования. Не удивлюсь, что скоро узнаю что язык запросов (в 8-й версии) это изобретение 1с.

    Reply
  33. Nykyanen

    (37) FedorovEvg,

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

    В моей практике часто проблема связанна именно с этим. Как писал выше по разного рода причинам стандартные алгоритмы пытаются в структуру вставить данные, которые вызывают ошибку. А её можно практически безболезненно решить путем замены «структуры» на «соответствие».

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

    Reply
  34. frc

    (30) artbear,

    вы просто не читаете все.

    И никаких преобразований ни Структура, ни Соответствие не делают — разве что преобразуются в строковой ключ (Структура) таким образом:…

    дурацким стандартным «умолчательным» преобразованием 1С.

    Еще раз.

    Это «преобразование» делает не Структура или Соответствие, а делается везде, где можно, никого не спрашивая.

    (29) artbear,

    что за ахинея ? 🙁

    эта «ахинея» как раз тот самый случай, когда визуально данные одни и те же, а типы — разные. Число и строка.

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

    В этом и суть — что мути много в 1С. Нет прозрачности работы.

    Т.е. вы меня критикуете, и сами же себя опровергаете.

    Тогда вам с собой надо поспорить вначале 🙂

    Reply
  35. frc

    (34)

    Соответствие хранит не значение ключа, а ссылку на него.

    вы опять сами себя путаете, да еще и пуатете старожилов вроде артбеар.

    Вы присвоили в качетстве ключа ССЫЛКу на элемент справочника (объект в терминах 1С), потом поменяли у ОБЪЕКТА код, потом запросили ВСЕ У ТОГО ЖЕ объекта через соответствие «выдай мне код того объекта, который я вставил вместо ключа!»

    Не изменились ни ссылка на объект (не изменился ключ), не изменилось ни значение по ключу.

    Но вы начали придумывать про какие-то «не хранит значение, носсылку..»

    Ну повесьте на СТРОКОВОЙ ключ «643» значение «642»).

    А потом попробуйте ввести строковой ключ «642» (значение — Неопределено), и получить по ключу «642» — значение «642».

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

    Вот это безобразие в определениях, работе инструкций и псевдомногофункциональность, отстуствие внятной справки и разъяснений по работе платформы от разраблотчиков и позволяет «кто в лес — кто по дрова» — каждый что хочет, то и «видит» в работе 1с-овых механизмов.

    Reply
  36. frc

    (37) FedorovEvg,

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

    по «использовала опыт» — идите в ветку про Си и 1С, шарпы и прочие СУБДы.

    Там и развернете свою мысль о том, как 1С использовала опыт по программированию, построению СУБД, и реализацию этого опыта в своих творениях.

    А играться на одинаковости терминов «там структура — здесь структура, там объект — и здесь объект», не понимая, видимо, какой «объект «там» (в мировом опыте»), и какая Структура — «здесь» (в 1С) — так для этого 1с и придуманы все эти подмены понятий: путать не желающих думать.

    Reply
  37. frc

    (38)

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

    «стандартные» механизмы не появляются сами по себе, и не пишут сами себя. Если в Структуру функция пытается вернуть не строковой код — так это ошибка программирования, а не поиски «а заменю-ка все на что-нибудь, делов-то, все ранво одно и то же!»

    А потом по коду — вместо «Получить» будет «Свойство» — и что, менять по всему коду теперь? Сами же себе такие грабли (разработчики) понаделали с неявностью, вот и расхлебывают программисты.

    Reply
  38. Nykyanen

    (40) frc,

    Соответствие хранит не значение ключа, а ссылку на него.

    Хотел донести мысль о том, что в структуре есть ключ строковый и по его значению можно получить значение.

    А в соответствии ссылка, данные на которые она ссылается, могут меняться как угодно.

    Пример, который попадался в типовых решениях:

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

    (42) frc, не зыбывают про нас 1с.

    Reply
  39. bomba

    (37) Уважаемый, боюсь в данной ветке присутствуют исключительно люди для которых книги могут быть только красно-желтого цвета. Боюсь они дожигают на костре последние экземпляры книг «Гради Буч. Объектно-ориентированный анализ и проектирование», а то вдруг мир узнает что понятие объекта изобрело не 1С… и что будет когда 1С изобретет наследование и полиморфизм??? Какойнибдь очкастый выскочка выкрикнет — бойан и это уже было!? Нет уж… Сжечь все книги и стереть интернет )))

    ОдинЭсФореваТугеза!!!

    Reply
  40. frc

    (44) bomba,

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

    Reply
  41. Uscolegy

    жду сравнение массива и таблицы значений.

    Reply
  42. frc

    (46) Usc,

    еще — NULL и Неопределено.

    Reply
  43. fixin

    ну эта ваще для чайников статья. Ну или для типовописателей, они хуже чайников.

    Reply
  44. AnryMc

    Я бы вставил в текст статьи ЗАМЕЧАНИЕ о сортировке в «Соответствии»

    Например, добавляем в Соответствие: Элемент1, 8; Элемент2, 2; Элемент3, 15; Элемент4, 315

    И при использовании «Для каждого …» получаем результат:

    Элемент1, 8

    Элемент3, 15

    Элемент4, 315

    Элемент2, 2

    Например для меня это тайна…

    Reply
  45. Nykyanen

    (49) AnryMc,

    У меня упорядочились так:

    «Элемент1», 8

    «Элемент4», 315

    «Элемент3», 15

    «Элемент2», 2

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

    У меня при нескольких попытках результат выводился одинаково.

    Платформа 8.2.16.368

    Reply
  46. AnryMc

    (50)

    Пример:

    Функция ИгрыССоответствием() Экспорт
    
    ТестовоеСоответствие=Новый Соответствие;
    
    ТестовоеСоответствие.Вставить(«Элемент1», 8);
    ТестовоеСоответствие.Вставить(«Элемент2», 2);
    ТестовоеСоответствие.Вставить(«Элемент3», 15);
    ТестовоеСоответствие.Вставить(«Элемент4», 315);
    ТестовоеСоответствие.Вставить(«Элемент5″, 6);
    
    Для КАЖДОГО текЭл ИЗ ТестовоеСоответствие Цикл
    
    Сообщить(текЭл.Ключ+» :: «+текЭл.Значение);
    
    КонецЦикла;
    
    Возврат Неопределено;
    
    КонецФункции
    

    Показать

    Результат выполнения:


    Элемент1 :: 8

    Элемент5 :: 6

    Элемент4 :: 315

    Элемент3 :: 15

    Элемент2 :: 2

    Т.е. обход производиться не по порядку ввода, и не в порядке ключей и значений!?!?!?

    1 — 5 — 4 — 3 — 2

    (Во вложении скриншот.)

    Reply
  47. Nykyanen

    (51) AnryMc,

    Если смотреть на последние 2 результата впечатление что платформа новое значение всегда вставляет после первого.

    Reply
  48. AnryMc

    Закономерности в принципе НЕТ

    смотри рисунок:

    Reply
  49. signum2009

    Сортируются по порядку только примитивные типы, объектные типы сортируются по внутреннему идентификатору

    Reply
  50. WarAn

    Всегда волосы дыбом встают от ужаса «Не А = Б» — это же просто дико ненаглядно! Глаз гораздо проще ловит знаки «=» или «<>», поэтому такие бредовые сравнения через «Не» и знак (которыми нередко грешат писатели типовых конф) читаются через пень-колоду: «Ага, равно. Равно?!! Ах, твоюждивизию, НЕ равно!!»

    Также моветон не ставить пробел после запятой — потому что автоматически читается как Объект.Свойство.

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

    Reply
  51. Nykyanen

    (55) эта статья была создана давно как эксперимент, что бы определить за что ставят «+».

    Статьи вроде https://infostart.ru/public/722861/ которые повышают производительность на порядки так не оцениваются.

    Анекдоты собирают больше «+» чем серьезная статья.

    Потому что основная масса пользователей сайта не программисты.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *