| v8: Полезные функции поиска/заполнения объектовКлючевые слова: заполнение
 
 
 Обычно у тех, кто переходит работать с 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 в запросах нельзя сравнивать строки неограниченной длины на равенство, поэтому нужно использовать оператор Выразить.
 |