База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Почему использование НайтиПоКоду нарушает стандарты 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 3 дня, 3 часа назад сделано
Odin – Одинэсник.
-
АвторСообщения
-
-
30 сентября 2025 в 10:45 #33544
Odineski
Участникпочему так обращаться ошибочно (нарушает стандарты 1С)?
Элемент = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры) -
30 сентября 2025 в 10:45 #33545
Odin – Одинэсник
УчастникДаниил, привет!
Обращение через
Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры)
считается ошибочным и нарушающим стандарты 1С по следующим причинам:1. **Нарушение принципа универсальности и гибкости кода**
МетодНайтиПоКоду
жестко привязывает поиск к коду элемента справочника. В реальных бизнес-процессах код может быть не уникальным или меняться, а также не всегда является удобным идентификатором для поиска. Стандарт 1С рекомендует использовать универсальные методы поиска, например,НайтиПоНаименованию
,НайтиПоСсылке
или запросы, которые более гибко и надежно работают с данными.2. **Отсутствие обработки ошибок и исключений**
МетодНайтиПоКоду
возвращает либо ссылку на элемент, либоНеопределено
, если элемент не найден. Если не проверить результат, это может привести к ошибкам в дальнейшем коде. Стандарты 1С рекомендуют всегда проверять результат поиска и обрабатывать ситуацию отсутствия элемента.3. **Потенциальные проблемы с производительностью**
При большом объеме данных поиск по коду без индексации или оптимизации может быть менее эффективным. В стандартах 1С рекомендуется использовать запросы с фильтрами и индексами, что обеспечивает более быструю и надежную работу.4. **Нарушение принципа инкапсуляции и бизнес-логики**
Код элемента — это технический реквизит, а бизнес-логика должна опираться на более осмысленные признаки (например, уникальные идентификаторы, свойства, характеристики). Прямой поиск по коду часто обходится без учета бизнес-правил, что ведет к ошибкам и дублированию.5. **Рекомендации по использованию**
В стандартах 1С рекомендуется:
– Использовать универсальные методы поиска с проверкой результата.
– При необходимости — использовать запросы к базе данных с фильтрами по нужным реквизитам.
– Внедрять дополнительные реквизиты для уникальной идентификации (например, уникальный идентификатор или GUID).
– Обеспечивать контроль и нормализацию справочника, чтобы минимизировать дубли и ошибки.**Пример правильного подхода:**
1С (Код)123451CЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование);Если Элемент = Неопределено Тогда// Обработка отсутствия элементаКонецЕсли;Или через запрос:
1С (Код)123456789101112131415161CЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬНоменклатура.СсылкаИЗСправочник.Номенклатура КАК НоменклатураГДЕНоменклатура.Код = &Код";Запрос.УстановитьПараметр("Код", КодНоменклатуры);Результат = Запрос.Выполнить().Выбрать();Если Результат.Следующий() ТогдаЭлемент = Результат.Ссылка;ИначеЭлемент = Неопределено;КонецЕсли;—
**Итог:**
Обращение черезНайтиПоКоду
считается ошибочным, потому что оно жестко привязывает логику к техническому реквизиту, не учитывает бизнес-правила, не обеспечивает надежность и гибкость, а также может привести к ошибкам и снижению производительности. Стандарты 1С рекомендуют использовать более универсальные и безопасные методы поиска с обязательной обработкой результата.Рекомендую посмотреть здесь:
https://infostart.ru/public/71715/
https://infostart.ru/1c/articles/62785/Если нужно, могу помочь с примером кода или доработкой поиска под ваши задачи.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.