Найти по наименованию 1с
то вы, возможно, вкушали последствия использования таких "образцов идеального кода".
Лично я не один и даже не десять раз наталкивался на последствия хардкодинга в виде использования функций НайтиПоКоду(), НайтиПоНаименованию() и НайтиПоНомеру() с зашитыми в коде значениями. Последствия всегда плачевные, их диапазон весьма широк - недоумение "почему оно не работает" или "почему в документе пустые реквизиты, вчера всё работало", необходимость куда-то лезть и менять прописанные значения, красные глаза от поиска в километрах кода той самой заветной строчки, а иногда и возможность интересно провести ночь за удалением/исправлением неправильно перенесённых/сгенерированных данных.
Всю гамму чувств от таких последствий не передать, могу только понадеяться, что для программистов, которые пишут код, не задумываясь о последствиях, есть отдельный котёл в аду.
Лучше напишу о том, как избежать использования этих конструкций в коде.
Первый способ,
который подсказывает Капитан Очевидность - это использование предопределённых элементов. Если вам в коде нужно сослаться на валюту Рубль и ни на какую другую - создайте предопределённый Рубль в справочнике "Валюты". На этом способе даже не останавливаюсь, потому что он, надеюсь, понятен всем. Минус такого способа в том, что он не применим в базе, которая уже наполнена данными. Т.е. если в базе уже есть непредопределённый Рубль, то вы же не будете добавлять предопределённый и перебивать все ссылки в базе с одного Рубля на другой? Очень надеюсь, что такая мысль не придёт вам в голову.
Второй способ.
Для версий ниже 8.3. Долгое время и весьма успешно для искоренения НайтиПо. () из написанного до меня кода я использовал ПланВидовХарактеристик и РегистрСведений.
Допустим, какой-то нехороший человек до вас в коде написал:
Тогда вы берёте и, не переставая молиться за спасение души этого человека, создаёте ПланВидовХарактеристик "СлужебныеПеременные" (типы значений выбираете в нашем случае справочник "Валюты") и РегистрСведений "ЗначенияСлужебныхПеременных" (непериодический, неподчинённый) с измерениями "Переменная" (тип ПВХСсылка.СлужебныеПеременные) и "Значение" (тип Характеристика.СлужебныеПеременные). Дальше в ПВХ создаёте предопределённый элемент Валюта_Рубль, а в РС запись - Валюта_Рубль = Рубль (выбираете из справочника "Валюты"). После этого идёте в код и пишете
Вот и всё. Теперь вы всегда знаете, что ваши механизмы не рассыпятся как карточные домики от изменения пользователем какого-нибудь нолика где-то в дебрях справочников-документов.
Плюс такого подхода - это совершенно отдельно стоящий механизм, который не влияет на типовые механизмы и не затрагивает типовые объекты метаданных.
Минус - да, должен быть заполнен регистр сведений, без него никуда. Здесь можно посоветовать при начале работы системы под админскими правами сверять количество служебных переменных в плане видов характеристик и количество записей в регистре "Значения служебных переменных" и, если какие-то переменные не заполнены - выдавать что-нибудь грозное и устрашающее, пусть заполняют. Ещё можно создать обработку автоматического заполнения регистра. Как заполнять? А с помощью тех самых ненавистных мне НайтиПоКоду("000001") - а что делать, ради такого благого дела можно их и потерпеть ещё разик :) Для особо пугливых можно просто использовать этот механизм как основной, а НайтиПо. () не удалять, а оставить как дублирующий, на всякий случай.
Третий способ.
Для версий от 8.3 - неожиданное продолжение первого способа с помощью новых технологий.
В платформе 8.3 появилась интересная возможность переназначать, удалять и всячески извращаться над предопределёнными элементами. Т.е. тот самый Рубль, который непредопределённый, можно просто сделать предопределённым! Не знаю как вы, я вначале не поверил, когда узнал, что так можно. Но оказалось, что да, действительно, докатились, теперь и в мире 1С нет ничего постоянного и надёжного. Но в данном случае это даже хорошо - мы можем, обойдясь подножными средствами, отделаться от НайтиПо. ()
Идём в конфигуратор, открываем нужный объект метаданных (наш справочник "Валюты"), идём в предопределённые, добавляем новый предопределённый Рубль, обязательно задаём ему вручную какой-нибудь незанятый код.
Теперь создаём новую обработку, в ней форму, в форме создаём процедуру ПриСозданииНаСервере(), там пишем
После этого удаляем тот Рубль, который стал нам не нужен. Всё, теперь на старый, потёртый, использовавшийся в базе Рубль можно ссылаться в коде как на предопределённый элемент. Плюс такого способа - ничего нигде не надо заполнять, включая любые пустые релизы вашей конфигурации, там всё уже будет по умолчанию. Минус - может возникнуть неразбериха при обновлениях, так же, в отличие от предыдущего способа, не может использоваться как отдельно стоящий механизм, который не затрагивает типовые объекты.
UPD:
Навеяно комментариями к статье.
В комментариях многие предлагают использовать метод ПолучитьСсылку("уид-того-что-нам-надо") с зашитым в тексте программы УИДом. Но, как и любая разновидность Г-кода, хардкодинг (зашивание значений в код) имеет множество недостатков и кажется мне непримлиемой. Фактически предлагается избавиться от одного хардкодинга другим, мотивируя это тем, что, якобы уид ссылки никогда не меняется. На деле же, как и любой Г-код, это - быстрая и дешёвая заплатка, сделанная на коленке.
Во-первых, УИД может поменяться - не УИД той ссылки, которую мы используем, а сам элемент, который мы используем. Например, раньше нам нужен был УИД элемента справочника Типы цен "Розничная", а теперь нужен "Розничная СПБ". Конечно, нужно лезть в код и менять, а до того система будет работать не так, как нужно.
Во-вторых, можно забыть о тестовых базах - не получится просто взять cf от конфигурации и накатить её на демо-базу и вести разработку там, просто перенося изменения в рабочую. Как раз сейчас работаю на проекте, где изначально было две базы - рабочая и тестовая, создавались они не из одного dt, а независимо друг от друга, соответственно, все УИДы разные. Пытаюсь вести разработку в демо-базе, но каждый раз, когда на тыкаюсь на все эти УИДы, не могу не пожелать долгой и мучительной смерти тому, кто всё это рисовал.
явно читабельнее, чем строка
Кто-то писал, что это исправляется добавлением комментария, но всё это из области фантастики - я в своей работе ни разу не встречал комментарий рядом с УИДом.
Специальные предложения
Т.к. правка стандартных справочников (создание предопределенных элементов) чриевата при обновлении, а планы видов характеристик, как-то уж слишком заморочены (судя по коду).
Риник; luda33; oldcopy; KolBbl4; Grubly; zannv; rpgshnik; korzhishe; DarkAn; GATTUSO; klinval; йцукенг; Spacer; m-serg74; the1; Mi4man; bashinsky; zyx2002; awk; dmpas; YPermitin; DancingShadow; Angry; AnryMc; Lancelot-2M; dsv_nsk; Nefertary; Cvetic; AllexSoft; rasswet; wolfsoft; ZOMI; Rusmus; maxis33; insurgut; Gureev; AlexanderKai; + 37 – Ответить
(2) davdykin, вполне согласен. Но тут есть два момента.
Первый - у плана видов характеристик есть встроенное в платформу свойство Тип характеристик. А на справочнике придётся добавлять многотипный реквизит.
Второй - есть ещё одно преимущество на регистре сведения, о котором забыл упомянуть - иногда бывает нужно, чтобы в разные моменты времени значения переменных были разными. Тут и спасает периодичность регистра сведений.
Но в целом да, можно и справочником обойтись. Честно говоря, статьёй хотелось не столько показать способы, сколько привлечь внимание к проблеме, о которой многие ни сном, ни духом.
user607943_apotehin1978; master555; Annette-326523; mkast; + 4 – Ответить + (2) тоже используем справочник, только название другое)Помимо описанного в статье в этом же справочнике хранятся различные настройки изменяющие поведение программы (например - "Распределять налог по обособленным подразделениям" или "Использовать старый алгоритм справки по отпуску")
З.Ы. Может статья и достаточно очевидна (если у человека уже есть хотя бы год опыта в 1С), но хорошо, когда кто-то разбирает простые вещи, помогая унифицировать способы разработки, так что плюсую. Есть еще один довольно простой способ. Получаем GUID элемента, и ищем по нему.
rpgshnik; teriban; kaufman; Tavalik; biz-intel; awk; ASDF2; dmpas; Uncore; mtv:); AnryMc; Рамзес; pm74; + 13 – 4 Ответить (3) WizaXxX, получаем каким образом? Если честно, не совсем понял приведённый код. Для работы с ГУИДом нам ведь его нужно вначале где-то взять, так же как и код или наименование, и с этим-то и проблема в работе с непредопределёнными элементами.
(5)
Открываем табло, и там пришем
А потом ворочаем как хотим в коде, будучи застрахованными от переименования и смены кода.
(6) Gureev, нет, как получить уид я знаю, спасибо, я имел в виду саму методологию такого способа. Но тут, по сути, получается тот же самый хардкодинг - вместо наименования зашиваем в код УИД, а потом идущие за нами будут с интересом разглядывать эти иероглифы и слать нам в след проклятья :) (8)В комментарии к коду пишем что значат иероглифы. Считаю метод с заранее полученным и известным уид самым простым и менее затратным.
(10) quebracho, хардкод всегда был и будет одним из подвидов Г-кода. Конкретно в данном случае - способ с уидом не подойдёт для распространения релизов. Т.е. в новой базе будет новый элемент с новым уидом.
Вообще в среде 1С, видимо из-за того, что здесь все самоучки, совершенно не распространено стремление к хорошо написанному и легко читаемому коду. А вот, скажем, в том же Эклипсе при написании кода на джаве у вас даже программка не сохранится, если вы переменную назовёте с большой буквы, хотя сам язык не ставит ограничений на регистр имени переменных (можно тот же код написать в блокноте и скомпилировать) - просто там есть хороший тон в написании кода, там даже среда разработки заботится о чистоте и красоте кода. А в 1С этого самого хорошего стиля нет и, наверное, ещё долго не будет. Нет понимания, что твой код, помимо того, что ты его написал, ещё должен работать максимально быстро, быть читаемым и понятным, быть простым и лаконичным, быть универсальным и работать не только в одном сегодняшнем дне. Поэтому запросто можно встретить в коде обращение к реквизиту через пять точек, копирование одного и того же кода в сто разных мест, миллион строк кода без единого пробела и комментария и прочую "красоту и оптимальность".
Возвращаясь к уиду, расскажу, как было в одном из моих случаев. Был большой заказчик, была ооочень сильно переписанная типовая конфигурация, было наследство из тон Г-кода с тысячами НайтиПо. (""). Был прикручен механизм из моего второго способа, удалены из кода все НайтиПо. (""). Со временем заказчик понимает, что у него так много уникальных доработок, что их можно продавать, ставит цель - новое отраслевое решение. Переписывать всё под предопределённые элементы уже слишком затратно, а вот механизм с ПВХ и РС отлично подойдёт и для вновь разворачиваемых баз. А вот если бы там НайтиПо. ("") было бы заменено на УИДы, пришлось бы переписать всё ещё раз.
Всегда нужно помнить, что ГУИД - это только здесь и сейчас, что это заплатка на конкретный случай, что это просто проще написать и отдать заказчику.
oldcopy; gefest-consult; Katren; for-elenak; MarsSt; theshadowco; wolfsoft; + 7 – Ответить хардкод всегда был и будет одним из подвидов Г-кода. Конкретно в данном случае - способ с уидом не подойдёт для распространения релизов. Т.е. в новой базе будет новый элемент с новым уидом.Каких еще релизов? Статья разве не о том, как красиво дорабатывать типовые конфигурации без привязки к элементам справочников по коду или наименованию? Если мы сами разрабатываем свою конфигурацию, само собой тут либо константы, либо предопределенные значения элементов справочников.
ставит цель - новое отраслевое решение. Переписывать всё под предопределённые элементы уже слишком затратно, а вот механизм с ПВХ и РС отлично подойдёт и для вновь разворачиваемых баз.Как же это он отлично подойдет, кто будет заполнять уйму ваших ссылок?
(12) insurgut, возможные способы заполнения я описал в статье, так же и те, что вы упомянули - из типовых, при разворачивании. Константы на дают расширяемости, т.е. если я захочу ещё одну переменную, нужно создавать ещё одну константу.
Да, статья действительно об уже работающих конфигурациях, но, как я уже говорил, уже работающие могут превратиться в релиз. Да и к тому же, как мне кажется, любая заплатка должна всё равно иметь "человеческое лицо" :) Т.е. если можно поставить заплатку на сегодня или же попытаться поставить заплатку на всегда (или на обозримое будущее) то лично я выберу второй способ, пусть даже он будет более затратным (в разумных пределах, конечно).
Конкретно в данном случае - способ с уидом не подойдёт для распространения релизов. Т.е. в новой базе будет новый элемент с новым уидом.Конкретно в другом случае - способ с уидом подойдет, т.к. заведомо не планируется распространение релизов.
Считаю метод с заранее полученным и известным уид самым простым и менее затратным.
Не переводится как "самое правильное решение на все случаи жизни". (10) quebracho, ага, а если базы две одинаковых по CF, но разные по данным, то ваш код будет редкой жутью. Считаю данный приём достойным ещё одного персонального котла в аду.
(5) проблема с непредопределенными элементами в том, что любой реквизит в нем по сути можно изменить, кроме, как раз, уникального идентификатора. Он для существующего в базе объекта не поменяется никогда ни при каких обстоятельствах.
Плюс (3) - нет необходимости создавать какие бы то ни было объекты. Минус (3) - сам код конечно будет удручать своей непонятностью и непрозрачностью.
(3) WizaXxX, надёжно, но неудобно/непонятно/нечитабельно. Это называется "магические строки".
С какого релиза? Это раз. И в каком режиме совместимости? Это два.
Сам подскажу: видимо только с версии 8.3.3.641 (может быть раньше? поправьте меня, если не так), и, соответственно, в режиме совместимости 8.3.2 - не работает. То есть просто нет такого свойства как ИмяПредопределенныхДанных.
И еще: на мой взгляд важно отметить, что просто назначить элемент предопределенным - нельзя. Можно только переназначить предопределенному элементу ссылку.
Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора База 1С при запуске уходит в дамп и вылетает 1
В последнее время частенько обращаются пользователи у которых после замены или ремонта компьютера 1С не запускается, а точнее при открытии уходит в dump и вылетает. Как правило, решение одно: Отключить аппаратное ускорение видеокарты В Window Блокировка записей, невозможно изменить или удалить из регистра. Конфликт блокировок MS SQL + 1C 3
При попытке удалить запись из регистра сведений - получаю ошибку: она заблокирована, ошибка блокировок и т.д. Отключил всех пользователей, перезапустил сервер, пробую удалить - опять ошибка блокировки :( Путем тестов было вяснено, что проблема Ввод по строке - поиск по первым символам или в любом месте наименования 6
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования! В 1С 8.3 по умолчанию настройки справочника номенклатуры такие: При такой настройке, механизм поиска в Веб браузер в 1С используя поле HTML документа 2
Настраивал клиенту CRM, он захотел - чтобы панель управления сайтом была в 1С. Хочет - делаем: Обработка Веб браузер проста, состоит из поля HTML документа и 20 строчек кода: Код команд: НаКлиенте Процедура Команда1(Команда) Объект.HTML = Посмотреть все результаты поиска похожих
Еще в этой же категории
Как очистить справочник удалив все не используемые элементы? 0
Очень часто менеджеры дублируют информацию в справочниках и время от времени их приходится чистить. Но как удалить только те элементы справочника, которые не используются в документах? Следующий пример кода поможет это сделать(в примере обрабатыва Вывод в поле Наименование справочника Штатное список значений из справочника Подразделения? 0
Есть два справочника Штатное и Подразделения. В справочнике Штатное есть автоматически генерируемое поле Наименование. Как программно сделать так чтобы в поле Наименование справочника Штатное выводились списком значений из поля Наименование справочн Посмотреть все в категории Справочники
Найти элемент справочника в 1С 8 можно тремя способами:
1) Поиск по коду
Если известен код элемента справочника, и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу код элемента справочника и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким кодом не найден. Следует заметить, что если в справочнике присутствует несколько элементов с указанным кодом, то будет возвращен тот, который найден первым.
Описание параметров метода НайтиПоКоду:
2) Поиск по наименованию
Если известно наименование элемента справочника и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу наименование элемента справочника и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким наименованием не найден. Следует заметить, что если в справочнике присутствует несколько элементов с указанным наименованием, то будет возвращен тот, который найден первым.
Описание параметров метода НайтиПоНаименованию:
3) Поиск по произвольному реквизиту
Если известно значение какого либо реквизита справочника и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоРеквизита(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу имя реквизита, его значение и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким значением указанного реквизита не найден. Следует заметить, что если в справочнике присутствует несколько элементов с таким значением указанного реквизита, то будет возвращен тот, который найден первым.
Использован релиз 3.0.104
В программе "1С:Бухгалтерия 8" (ред. 3.0) реализован механизм полнотекстового поиска во всех полях любого справочника, документа, списка и др.:
- Сочетание клавиш "Ctrl" и "F" автоматически устанавливает курсор в поле "Поиск". Начните набирать текст и поиск будет запущен автоматически.
- По кнопке со значком лупы (или сочетанием клавиш "Alt" и "F") можно выбрать "Расширенный поиск" и установить параметры поиска (рис. 1).
Если работа поиска по каким-то причинам нарушена, либо осуществляется медленно, рекомендуется очистить индексы и затем обновить их (рис. 2). Эти действия доступны только пользователям с правами "Администратор".
Внимание! При работе через облачные технологии операции по очистке и обновлению индексов выполняются автоматически.
Для автоматического обновления индексов, быстрой и корректной работы поиска должно быть настроено выполнение двух регламентных заданий – "Обновление индекса ППД" и "Слияние индекса ППД". Обычно эти регламентные задания настроены по умолчанию и выполняются в программе ежедневно по расписанию в автоматическом режиме (например, каждый день с 8.00 каждый час).
Внимание! При работе через облачные технологии регламентные задания выполняются автоматически, их настройка не требуется.
- Раздел: Администрирование – Обслуживание.
- Раскройте подраздел "Регламентные операции" и перейдите по ссылке "Регламентные и фоновые задания".
- В сформированном списке установите флажки у заданий "Обновление индекса ППД" и "Слияние индекса ППД".
- Поочередно двойным щелчком мыши откройте каждое задание, перейдите по ссылке "Расписание".
- В форме "Расписание" на закладке "Общее" указываются дата начала и завершения задания и режим повтора.
- На закладке "Дневное" укажите время начала задания и время повтора.
- На закладке "Недельное" и "Месячное" проверьте установку флажков по дням недели и по месяцам.
- Кнопка "ОК", затем кнопка "Записать и закрыть".
Смотрите также
Поиск в коллекциях значений
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. При двух и более операциях поиска в объекте ТаблицаЗначений с большим количеством строк (*) рекомендуется:
- Индексировать колонки, по которым выполняется поиск;
- Но только те из них, которые обладают хорошей селективностью (т.е. каждому значению этой колонки должно соответствовать небольшое количество строк). В противном случае, индексирование не даст эффекта, либо он будет отрицательным (потрачено лишнее время на индексирование).
* Примечание: следует ориентироваться на 1000 строк и более, а также учитывать не только размер таблицы, в которой выполняется поиск, но и сколько раз он выполняется. Например, даже если таблица относительно небольшая в 100 строк, но поиск по ней выполняется 100 раз, ее тоже имеет смысл индексировать. В то же время, нет смысла индексировать таблицу из-за только одной единственной операции поиска.
2. Для поиска значений предусмотрены два метода объекта ТаблицаЗначений :
При поиске значения в одной колонке таблицы значений оба метода одинаково эффективно используют индекс, если он был задан (см. п.1).
Однако при поиске значения сразу по нескольким (или по всем) колонкам необходимо учитывать следующие ограничения.
2.1. Не следует использовать метод Найти для поиска по нескольким колонкам в таблицах значений с большим количеством строк, даже если проиндексированы все колонки, обладающие хорошей селективностью. Это ограничение вызвано тем, что метод Найти выполняет поиск с применением индекса только по одному полю.
Например:
ТЗ.Индексы.Добавить("Колонка1");
ТЗ.Индексы.Добавить("Колонка2");
. = ТЗ.Найти("найдется все", "Колонка1, Колонка2"); // Индекс НЕ используется!
В этом примере, несмотря на наличие индекса для колонок Колонка1 и Колонка2 , поиск все равно будет выполняться перебором всех строк в таблице значений (что очень ресурсоемко на больших объемах данных).
2.2. При использовании метода НайтиСтроки в таблицах значений с большим количеством строк следует обеспечить, чтобы список полей индекса был точно таким же, как он задан в структуре поиска (порядок полей не важен). В противном случае, индекс не будет задействован, и поиск будет выполняться перебором всех строк в таблице значений (что очень ресурсоемко на больших объемах данных).
Например:
ТЗ.Индексы.Добавить("Колонка1"); // Индекс1
ТЗ.Индексы.Добавить("Колонка2"); // Индекс2
. = ТЗ.НайтиСтроки(Новый Структура("Колонка1, Колонка2 ", "Ищу1","Ищу2")); // Индекс НЕ используется!
. = ТЗ.НайтиСтроки(Новый Структура("Колонка1", "Ищу1") ); // OK - используется Индекс1
. = ТЗ.НайтиСтроки(Новый Структура("Колонка2", "Ищу2") ); // OK - используется Индекс2
. = ТЗ.НайтиСтроки(Новый Структура("Колонка1, Колонка2", "Ищу1","Ищу2")); // OK - индекс используется
. = ТЗ.НайтиСтроки(Новый Структура("Колонка2, Колонка1", "Ищу2","Ищу1")); // OK - индекс используется
. = ТЗ.НайтиСтроки(Новый Структура("Колонка1", "Ищу1") ); // Индекс НЕ используется!
. = ТЗ.НайтиСтроки(Новый Структура("Колонка2", "Ищу2") ); // Индекс НЕ используется!
2.3. Аналогичное ограничение действует и для метода Скопировать таблицы значений при вызове с параметром ПараметрыОтбора ( Структура ).
3. В тех случаях, когда для таблицы значений применяется сортировка по колонкам, содержащим ссылочные значения, необходимо учитывать, что при этом для каждой из этих колонок для всех строк таблицы значений системой будет выполнено обращение к информационной базе за представлением этой ссылки.
- В тех случаях, когда требуется сортировка по наименованию – сразу, на этапе заполнения, добавлять в таблицу дополнительные колонки с представлениями, и сортировку выполнять уже по ним. Если, конечно, это не вызовет аналогичных многократных обращений к информационной базе;
- В остальных случаях – сортировать «по ссылке», а не по представлению. Для этого в методе Сортировать следует использовать объект СравнениеЗначений :
ОбъектСравнения = Новый СравнениеЗначений;
ТаблицаДокументов.Сортировать("Дата,Ссылка", ОбъектСравнения);
Особенно это важно для таблиц с большим количеством (несколько сотен и тысяч) строк, в алгоритмах критических ко времени исполнения.
3.1. При поиске в объекте Массив с большим количеством элементов(*) следует отказаться от массива в пользу:
- объекта Соответствие , если не важен порядок элементов;
- индексированной ТаблицаЗначений , если порядок элементов значим.
Это обусловлено тем, что в указанных случаях поиск занимает в большинстве случаев константное время, а в массиве поиск выполняется перебором и поэтому пропорционален количеству элементов.
* Примечание: следует ориентироваться на 1000 элементов и более, а также учитывать не только размер массива, но и сколько раз выполняется поиск. Например, если поиск выполняется многократно, в частности, в цикле, то эта рекомендация также действительна для массивов меньшего размера (до 1000 элементов). Особого внимания требуют универсальные механизмы, которые могут применяться на сколь угодно больших объемах данных.
3.2. При необходимости обеспечить уникальность элементов в большом массиве следует однократно в конце алгоритма вызвать функцию СвернутьМассив или процедуру ДополнитьМассив с параметром ТолькоУникальныеЗначения = Истина (модуль ОбщегоНазначения Библиотеки стандартных подсистем).
4. Аналогичный недостаток существует и у объекта ДеревоЗначений , в котором не предусмотрено индексов и поиск выполняется перебором (как в массиве). В указанных выше случаях объект ДеревоЗначений следует заменять индексированным объектом ТаблицаЗначений .
Читайте также: