Книга знаний

1С:Предприятие / v8 / Объекты конфигурации

v8: Полезные функции поиска/заполнения объектов

Библиотека функций для поиска/заполения объектовАвтор статьи: Гений 1С
Последняя редакция №1 от 26.02.06
URL: http://kb.mista.ru/article.php?id=106

Ключевые слова: заполнение


Обычно у тех, кто переходит работать с 77 на 80 возникают проблемы с поиском элементов справочников и документов - для этого нужно писать запросы.
Для тех, кто не любит писать запросы в 1С 80, предлагаю использовать функции для поиска и заполнения объектов:

ОбъектНайтиПоРеквизитам(Тип, Вид, Стр, Много=ложь);
Ищет объект по реквизитам, указанным в структуре Стр.
Если Много=истина, возвращается массив найденных элементов, иначе только первый найденный элемент. Поиск осуществляется с помощью запроса.

ОбъектСоздатьПоРеквизитам(Тип, Вид, Стр, СтрЗаписи, Много);
Ищет один объект(ы) по реквизитам, указанным в структуре Стр и заполняет его реквизиты согласно структуре СтрЗаписи.
Удобна в тех случаях, когда если объект существует нам нужно изменить его, а если не существует - создать.

ОбъектЗаполнитьПоРеквизитам(Объект, СтрЗаписи);
Просто заполняет Объект согласно структуре СтрЗаписи.

Стр(_Стр, К1=Неопределено, Зн1=Неопределено ..., К10=Неопределено, Зн10=Неопределено);
Если параметр _Стр - структура значений, то делается ее копия и в нее добавляются значения Зн(I) с ключами К(I).
Если же первый параметр не структура, то просто создается и возвращается структура согласно переданным значениям и ключам.
Это как бы более компактный альтернативный конструктор конструктору 1С 80 Новый Структура.

Примеры:
Объект.НайтиПоРеквизитам("Справочники", "Номенклатура", Стр("Наименование", "Пиво"), истина);
- ищет пиво
Объект.НайтиПоРеквизитам("Задачи", "ЗадачаГлавная", Стр("БизнесПроцесс", БиснесПроцесс), истина);
- ищет все задачи по данному бизнес-процессу

Объект.СоздатьПоРеквизитам("Справочник", "Номенклатура", Стр("Наименование", "Пиво"), Стр("Код", 12, "Артикул", 177));

Присваивает пиву код 12 и артикул 177.

В качестве дополнительного продвижения можно в структуре поиска и заполнения вводить функции поиска. Т.е. если значением реквизита поиска является структура, это означает что поиск или заполнение нужно делать более специфичным, согласно параметрам этой структуры, например искать на сравнение больше-меньше или устанавливать только те реквизиты, которые не заполнены. Примеры:

Объект.НайтиПоРеквизитам("Справочники", "Номенклатура", Стр("Код", Стр("<", 123)), истина);
- возвращает все элементы, код которых меньше 123.

Объект.НайтиПоРеквизитам("Справочники", "Номенклатура", Стр("Код", Стр("Условие", "Элемент.Код<123 И Элемент.Код>10")), истина);
- возвращает все элементы, удовлетворяющим условию, написанному на языке запросов.

Объект.ЗаполнитьПоРеквизитам(Товар, Стр("Артикул", Стр("ТолькоПустые", "123-АК"), Стр("Код", Стр("ТолькоПустые", "123")));
- устанавливает товару код 123 и артикул 123-АК только в том случае, если эти реквизиты не заполнены.

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

Также при написании таких функций нужно обратить внимание на сравнение строк неограниченной длины при поиске. Например, частый случай на практике - поиск по комментарию. В 1С 80 в запросах нельзя сравнивать строки неограниченной длины на равенство, поэтому нужно использовать оператор Выразить.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика