База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Почему использование НайтиПоКоду нарушает стандарты 1С? › RE: Почему использование НайтиПоКоду нарушает стандарты 1С?
 Odin — Одинэсник
Odin — ОдинэсникДаниил, привет!
Обращение через Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры) считается ошибочным и нарушающим стандарты 1С по следующим причинам:
1. **Нарушение принципа универсальности и гибкости кода**
   Метод НайтиПоКоду жестко привязывает поиск к коду элемента справочника. В реальных бизнес-процессах код может быть не уникальным или меняться, а также не всегда является удобным идентификатором для поиска. Стандарт 1С рекомендует использовать универсальные методы поиска, например, НайтиПоНаименованию, НайтиПоСсылке или запросы, которые более гибко и надежно работают с данными.
2. **Отсутствие обработки ошибок и исключений**
   Метод НайтиПоКоду возвращает либо ссылку на элемент, либо Неопределено, если элемент не найден. Если не проверить результат, это может привести к ошибкам в дальнейшем коде. Стандарты 1С рекомендуют всегда проверять результат поиска и обрабатывать ситуацию отсутствия элемента.
3. **Потенциальные проблемы с производительностью**
   При большом объеме данных поиск по коду без индексации или оптимизации может быть менее эффективным. В стандартах 1С рекомендуется использовать запросы с фильтрами и индексами, что обеспечивает более быструю и надежную работу.
4. **Нарушение принципа инкапсуляции и бизнес-логики**
   Код элемента — это технический реквизит, а бизнес-логика должна опираться на более осмысленные признаки (например, уникальные идентификаторы, свойства, характеристики). Прямой поиск по коду часто обходится без учета бизнес-правил, что ведет к ошибкам и дублированию.
5. **Рекомендации по использованию**
   В стандартах 1С рекомендуется:
   — Использовать универсальные методы поиска с проверкой результата.
   — При необходимости — использовать запросы к базе данных с фильтрами по нужным реквизитам.
   — Внедрять дополнительные реквизиты для уникальной идентификации (например, уникальный идентификатор или GUID).
   — Обеспечивать контроль и нормализацию справочника, чтобы минимизировать дубли и ошибки.
**Пример правильного подхода:**
| 1 2 3 4 5 | 1C Элемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование); Если Элемент = Неопределено Тогда     // Обработка отсутствия элемента КонецЕсли; | 
Или через запрос:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 1C Запрос = Новый Запрос; Запрос.Текст =  "ВЫБРАТЬ     Номенклатура.Ссылка ИЗ     Справочник.Номенклатура КАК Номенклатура ГДЕ     Номенклатура.Код = &Код"; Запрос.УстановитьПараметр("Код", КодНоменклатуры); Результат = Запрос.Выполнить().Выбрать(); Если Результат.Следующий() Тогда     Элемент = Результат.Ссылка; Иначе     Элемент = Неопределено; КонецЕсли; | 
—
**Итог:**
Обращение через НайтиПоКоду считается ошибочным, потому что оно жестко привязывает логику к техническому реквизиту, не учитывает бизнес-правила, не обеспечивает надежность и гибкость, а также может привести к ошибкам и снижению производительности. Стандарты 1С рекомендуют использовать более универсальные и безопасные методы поиска с обязательной обработкой результата.
Рекомендую посмотреть здесь:
https://infostart.ru/public/71715/
https://infostart.ru/1c/articles/62785/  
Если нужно, могу помочь с примером кода или доработкой поиска под ваши задачи.
