Как элемент данных справочного характера в 1С сделать предопределенным

Как элемент данных справочного характера в 1С сделать предопределенным

При разработке прикладных иногда возникает ситуация, когда в коде приходится обращаться к элементам данных справочного характера. Начинающие разработчики чаще всего начинают хардкодить, используя методы НайтиПоКоду() или НайтиПоНаименованию(), прописывая в коде пользовательские в качестве значения для параметра метода.

В статье рассмотрим, как элемент данных справочного характера в 1С сделать предопределенным.

Предопределенные элементы

Предопределенные элементы – это элементы прикладных объектов конфигурации, которые создаются в конфигураторе разработчиком, если к ним нужно постоянно обращаться из программного кода. Обращение к таким элементам выполняется по имени, что является самым надежным способом, в отличие от предварительного поиска с помощью методов НайтиПоКоду() или НайтиПоНаименованию().

Предопределенные элементы могут содержать следующие прикладные объекты:

  • Справочники
  • Планы видов характеристик
  • Планы счетов
  • Планы видов расчета
Предопределенные элементы

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

Связанный предопределенный элемент данных информационной базы с предопределенным элементом конфигурации

Здесь нужно уточнить, что у объектов конфигурации есть свойство «Обновление предопределенных данных», в котором указывается поведение платформы при создании и обновлении в информационной базе предопределенных элементов данных. Существует три варианта поведения:

Авто – система самостоятельно определяет нужно или нет создавать и обновлять в информационной базе предопределенные элементы данных.

Обновлять автоматически – система автоматически создает и обновляет в информационной базе предопределенные элементы данных.

Не обновлять автоматически – система не будет автоматически создавать и обновлять в информационной базе предопределенные элементы данных.

Свойство «Обновление предопределенных данных»

Связь предопределенных элементов с элементами данных осуществляется с помощью стандартного реквизита «ИмяПредопределенныхДанных». Указывая в данном реквизите имя предопределенного элемента или оставляя его пустым, можно элемент данных связывать или отвязывать от предопределенного элемента конфигурации.

Связь с помощью стандартного реквизита «ИмяПредопределенныхДанных»

Практический пример

Рассмотрим нюансы работы с предопределенными элементами в демонстрационной конфигурации «Управляемое приложение».

Постановка задачи

При создании документа «Продажа товара» чаще всего используется вид цены «Мелкооптовая».

Часто используемый вид цены

Менеджер по продажам просит, чтобы данный вид цены устанавливался по умолчанию при создании нового документа.

Вид цены в документе «Продажа товара»

Решение (хардкод)

В справочнике «Виды цен», элемент данных «Мелкооптовая» является обычным элементом, не предопределенным, обратиться к нему по имени не получится. Первое, что приходит в голову, это использовать методы НайтиПоКоду() или НайтиПоНаименованию(). Сразу скажу, это хардкод чистой воды, от которого нужно избавляться, но в экспериментальных целях проверим, к чему такой код может привести.

Элементы данных справочника «Виды цен»

Реквизит «Вид цены» нужно заполнять только при создании новых документов, поэтому будем использовать событие ОбработкаЗаполнения() в модуле объекта документа «Продажа товара». Это событие возникает только при создании новых объектов.

В коде жестко прописываем поиск элемента данных по конкретному наименованию, а именно по наименованию – «Мелкооптовая».

Проверяем работоспособность. При создании нового документа, вид цены будет автоматически заполняться элементом – «Мелкооптовая».

Автоматическое заполнение реквизита «Вид цены»

Такой код будет успешно работать пока пользователь не внесет в наименования свои поправки. Например, наименование «Мелкооптовая» заменит на «Мелкий опт». После этого, оператор с методом НайтиПоНаименованию() работать больше не будет.

Решение (один из правильных вариантов)

Как поступить в данной ситуации? Какой написать универсальный код, чтобы он был максимально защищен от некорректных действий пользователей?

Существует несколько способов решения данной проблемы.

Суть предлагаемого нами решения, заключается в использовании предопределенного элемента данных, к которому можно обратиться по имени.

Существующий элемент данных «Мелкооптовая» не является предопределенным элементом, поэтому его нужно связать с предопределенным элементом.

Добавление предопределенного элемента и исправление программного кода

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

Добавление предопределенного элемента

Изменим код обращения к предопределенному элементу по имени. Такой способ считается самым надежным обращением к элементу данных.

В информационной базе в справочнике «Виды цен» теперь два элемента с наименованием «Мелкооптовая», но один простой, а другой предопределенный.

Два элемента данных «Мелкооптовая»

Для визуального отличия элементов данных новый предопределенный элемент данных в режиме 1С:Предприятие переименуем в «Мелкооптовая НОВАЯ». Конечно, можно их отличать по реквизиту «Код», но по реквизиту «Наименование» будет нагляднее.

Предопределенный элемент данных и обычный

Добавим новый документ «Продажи товара», убедимся, что вид цены заполняется предопределенным элементом.

Проверка работоспособности

В информационной базе теперь два элемента, обычный элемент данных «Мелкооптовая» и предопределенный элемент «Мелкооптовая НОВАЯ». Получается, что часть документов будет с одним элементом информационной базы, а часть с другим элементом информационной базы. Конечно, так оставлять нельзя. Необходимо, элемент данных «Мелкооптовая» сделать предопределенным элементом, элемент данных «Мелкооптовая НОВАЯ» – простым. В этом поможет служебный реквизит «ИмяПредопределенныхДанных», при очистке значения в котором, элемент данных становится простым элементом, а при указании в нем имени предопределенного элемента элемент данных становится предопределенным элементом данных.

Привязка существующего элемента данных к предопределенному элементу

Для привязки можно создать внешнюю обработку с небольшим кодом или воспользоваться специальной обработкой «ГрупповоеИзменениеРеквизитов.epf», которую можно скачать по ссылке https://its.1c.ru/db/metod8dev/content/5443/hdoc.

Использование обработки «ГрупповоеИзменениеРеквизитов.epf»

В обработке указываем, что изменяем элементы данных в справочнике «Виды цен».

Выбор справочника для изменения элементов

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

Добавляем условие на отбор определенных элементов

Для отображения стандартных реквизитов включаем показ служебных реквизитов.

Включение показа служебных реквизитов

В строке реквизита «Имя предопределенных данных» устанавливаем флаг, новое значение оставляем пустым. Выполняем изменение реквизитов.

Настройка реквизита «Имя предопределенных данных»

В результате предопределенный элемент данных «Мелкооптовая НОВАЯ» станет простым элементом данных, на что будет указывать отсутствие золотистой точки в иконке элемента. Таким образом освободили предопределенный элемент конфигурации для привязки его к другому элементу данных информационной базы.

Предопределенный элемент данных стал простым

Возвращаемся в обработку «Групповое изменение реквизитов», выбираем ранее существующий элемент данных «Мелкооптовая», изменив значение для реквизита «Код».

Отбор ранее существующего элемента данных «Мелкооптовая»

В реквизите «Имя предопределенных данных» указываем имя предопределенного элемента конфигурации. Выполняем изменение реквизитов.

Установка нового значения в реквизит «Имя предопределенных данных»

Элемент данных «Мелкооптовая» стал предопределенным элементом.

Элемент данных «Мелкооптовая» стал предопределенным

Добавляем новый документ «Продажа товара», убеждаемся, что вид цены заполняется предопределенным элементом, который ранее был обычным элементом данных. Таким образом, сделав обычный элемент данных предопределенным и изменив код на код обращения к предопределенному элементу по имени, избавились от хардкода. Такой вариант обращения к элементам данных считается самым стабильным.

Автоматическая установка элемента данных по имени

Создание внешней обработки для работы с предопределенными элементами

Создаем новую внешнюю обработку «Работа с предопределенными элементами». Добавляем новую форму.

Внешняя обработка

Для формы добавляем реквизиты:

  • ИмяПредопределенныхДанных – тип Строка.
  • ОбъектКонфигурации – тип ПланВидовРасчетаСсылка, ПланВидовХарактеристикСсылка, ПланСчетовСсылка, СправочникСсылка.

Добавляем команду «СделатьПредопределенным».

Размещаем реквизиты и команду на форме.

Форма внешней обработки

Для команды «СделатьПредопределенным» прописываем код, который получает объект информационной базы для выбранного элемента, изменяет значение в стандартном реквизите «ИмяПредопределенныхДанных» и записывает внесенные изменения.

Добавляем еще один предопределенный элемент «Розничная», с которым свяжем существующий элемент данных с помощью обработки.

Новый предопределенный элемент «Розничная»

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

Настройка свойства «Обновление предопределенных данных»

На данный момент в справочнике «Виды цен» элемент данных «Розничная» является обычным элементом.

Список видов цен

Для связи его с предопределенным открываем обработку «Работа с предопределенными элементами». В поле «Объект конфигурации» указываем справочник «Виды цен», выбираем элемент данных «Розничная» и в поле «Имя предопределенных данных» указываем имя предопределенного элемента конфигурации – «Розничная». Нажимаем кнопку «Сделать предопределенным».

Заполнение полей данных обработки «Работа с предопределенными элементами»

Заполнение полей данных обработки «Работа с предопределенными элементами»

Элемент данных «Розничная» стал предопределенным элементом, теперь к нему в коде можно обращаться по имени.

Элемент данных «Розничная» стал предопределенным элементом

Подводим итоги

Мы рассмотрели, как элемент данных справочного характера можно сделать предопределенным и где такой механизм может пригодиться. Для этого достаточно у элемента данных в стандартном реквизите «ИмяПредопределенныхДанных» указать имя предопределенного элемента конфигурации. Чтобы выполнить данную настройку можно воспользоваться обработкой «ГрупповоеИзменениеРеквизитов.epf», или написать свою узконаправленную внешнюю обработку.

Ваганов Сергей, эксперт в области разработки прикладных решений на платформе 1С:Предприятие, преподаватель-методист CORS Academy и автор курса «Разработчик 1С с нуля до профессионала».

Статья создана на основе материалов курса «Разработчик 1С с нуля до профессионала».

Как элемент данных справочного характера в 1С сделать предопределенным
Подписаться
Уведомить о
guest

wp-puzzle.com logo

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

подпишитесь на рассылку академии

2 письма в неделю со свежими новостями о скидках, курсах и других событиях

Нажимая на кнопку “Подписаться”, вы даете согласие на обработку персональных данных