Проблема
Наверняка, при доработке типовых конфигураций, Вы сталкивались с такой необходимостью, как подстановка существующих элементов справочника или плана вида характеристик (ПВХ) в параметры запроса.
Запрос.УстановитьПараметр("ТараИУпаковка",Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Тара и упаковка"));
Ну или при создании нового документа в режиме 1С предприятия нужно, чтобы при определённых условиях подставлялся именно этот элемент справочника.
оДок = Документы.ПоступлениеБезналичныхДенежныхСредств.СоздатьДокумент();
оДок.НаправлениеДеятельности = Справочники.НаправленияДеятельности.НайтиПоНаименованию("Валютные операции",Истина);
В этих примерах напрашивается создать предопределенный элемент. Ведь как-то “НайтиПоКоду” или “НайтиПоНаименованию” - выглядит не очень оптимально. Но, к сожалению, в расширении с режимом совместимости 8.3.14 нет возможности создать или добавить свой предопределенный элемент у заимствованных объектов метаданных.
Решение
Я предлагаю решать эту проблему следующим образом:
В расширении добавить новый общий модуль повторного использования. Обычно, в конце имён таких модулей добавляют “ПовтИсп”.
Внутри модуля создать все необходимые функции для получения ссылки на нужный элемент справочника или ПВХ.
Теперь платформа будет искать по наименованию только 1 раз за сеанс, а при повторных вызовах - использовать значение в кэше. Кроме того, если элемента нет - то создаст его!
Это очень полезно использовать. Ведь обычно разработка ведётся в копии базы. Разработчик создаст там новый элемент для подстановки и после тестирования конфигурацию загрузит в рабочую базу. Когда пользователь рабочей базы воспользуется алгоритмом, то и в его рабочей базе автоматически создастся такой-же элемент справочника и данные заполнятся корректно.
Ну а теперь я представляю вам то, ради чего писалась вся эта статья.
Создание таких функций, которые сначала ищут, а если не находят - создают, дело довольно хлопотное. Нужно программно заполнять все необходимые реквизиты создаваемого элемента, чтобы он работал корректно. И, обычно, программист понимает, что нужно бы так сделать, но не делает, потому что лень. Ну ведь написать “НайтиПоКоду” ведь куда быстрее, ага? Только, вот беда, потом придётся пользователю объяснять, что для того, чтобы программа корректно заработала, то не соизволит ли пользователь сначала создать вот такой-то элемент вот с такими-то галочками… Нет уж, решил я, на пользователей надеяться нельзя. Вдруг, чего перепутают. Лучше буду использовать модуль ПовтИсп. И для ускорения создания функций получения “предопределённых” моих элементов я написал обработку, которая генерирует сам код поиска и создания таких элементов.
Возможности обработки
- Запускается в обычных и управляемых формах
- Распознаёт предопределенные элементы значений, которыми нужно заполнить указанный элемент, в случае его отсутствия
- Распознает тип “ОписаниеТипов” для оформления новых элементов ПВХ.
- Генерирует алгоритм для всех заполненных табличных частей справочника.
Информация о совместимости
Обработка тестировалась на платформе 8.3.18.1563 и конфигурации 1С:Комплексная автоматизация 2 (2.4.13.170). Но это не значит, что работать будет только там. Работать будет и в других типовых/доработанных конфигурациях, где есть общий модуль “ОбщегоНазначения”. Пробуйте.