Цель: необходимо обращаться в коде к нетиповым предопределённым значениям
Для того, чтобы обращаться в коде к значениям, которые не были определены в типовой конфигурации, как предопределённые, можно реализовать механизм.
За основу хранения данных возьмём объект конфигурации – план видов характеристик (далее - ПВХ). Данный объект позволяет хранить для каждой характеристики тип значения, который данный объект может принимать. Более подробно о данном объекте написано в документации: https://v8.1c.ru/platforma/plan-vidov-harakteristik/
Разберём по пунктам реализацию данного механизма.
- Создаём ПВХ, заполняя в пункте «Основные» по примеру, представленному на рисунке 1.
Рисунок 1 - Пункт «Основные»
В пункте «Основные» содержится следующая информация:
Имя ПВХ, его синоним и тип значения, которое (-ые) может храниться в данном ПВХ.
В Пояснение можно написать следующее:
Все константы должны добавляться как предопределённые элементы.
Можно хранить список значений в табличной части элемента.
- В пункте «Данные» реквизитный состав объекта и табличной части представлен на рисунке 2.
Рисунок 2 - Пункт «Данные»
В пункте «Данные» содержится следующая информация:
СписокЗначений - это реквизит с типом Булево
Значение - это реквизит, с типом Характеристика.ОК_Константы
Значения - это табличная часть, в которой хранится реквизит Значение с типом Характеристика.ОК_Константы
- В пункте «Прочее» определяем перечень предопределённых значений в зависимости от контекста задачи; примерный перечень представлен на рисунке 3.
Рисунок 3 - Пункт «Прочее»
- Результат пунктов 1-3 в пользовательском режиме показан на рисунке 4.
Рисунок 4 - Пункт «Пользовательский режим»
- Для того, чтобы получать программно значения необходимо создать общий модуль, в котором будут написаны функции.
ОК_КонстантыВызовСервера - это общий модуль, у которого свойства, указанные на рисунке 5.
Рисунок 5 - Пункт «Пользовательский режим»
- Функции в общем модуле.
#Область ПрограммныйИнтерфейс
// Параметры:
// ЭлементПВХ - ПланВидовХарактеристикСсылка.ОК_Константы - Предопределенный элемент плана
//
// Возвращаемое значение:
// Произвольный - Значение константы
//
Функция ЗначениеКонстанты(ЭлементПВХ) Экспорт
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементПВХ, "Значение");
КонецФункции
// Параметры:
// ЭлементПВХ - ПланВидовХарактеристикСсылка.ОК_Константы - Предопределенный элемент плана
//
// Возвращаемое значение:
// Массив - массив значений константы
//
Функция ЗначенияКонстанты(ЭлементПВХ) Экспорт
ЭлементПВХ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементПВХ, "Ссылка");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОК_КонстантыЗначения.Значение КАК Значение
|ИЗ
| ПланВидовХарактеристик.ОК_Константы.Значения КАК ОК_КонстантыЗначения
|ГДЕ
| ОК_КонстантыЗначения.Ссылка = &Ссылка
| И ОК_КонстантыЗначения.Ссылка.СписокЗначений
| И НЕ ОК_КонстантыЗначения.Ссылка.ПометкаУдаления";
Запрос.УстановитьПараметр("Ссылка", ЭлементПВХ);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Значение");
КонецФункции
// Параметры:
// ЭлементПВХ - ПланВидовХарактеристикСсылка.ОК_Константы - Предопределенный элемент плана
// ЗначениеПВХ - устанавливаемое значение ЭлементаПВХ
Процедура УстановитьЗначениеКонстанты(ЭлементПВХ, ЗначениеПВХ) Экспорт
ПВХОбъект = ЭлементПВХ.ПолучитьОбъект();
ПВХОбъект.Значение = ЗначениеПВХ;
ПВХОбъект.Записать();
КонецПроцедуры
#КонецОбласти
- Пример вызова функций.
ОК_КонстантыВызовСервера.ЗначениеКонстанты("ПланВидовХарактеристик.ОК_Константы.Договоры")= ЭтотОбъект.ВидДокумента
Механизм готов.
Комментарии, пожелания приветствуются!
С уважением, Оля-ля.