ВведениеОчень часто при разработке какого либо решения разработчики опираются на некоторые данные, которые должны быть в системе несмотря ни на что. На эти данные опирается вся логика программы и как следствие очень часто к ним производится обращение в программных модулях. Такие элементы называются предопределенными, и они могу существавать для:
Зачастую решение о том что " ...а объект все таки лучше сделать предопределенным.." встает, когда необходимо явно обратится к элементу в модуле, использовать поиск по коду или по другим реквизитам, в данном случае не очень корректно, поскольку конфигурация ставится зависимой от данных, а не наоборот. Свойство "Предопределенный" присутствующее в метаданных предназначено только для чтения, каких либо методов позволяющих сделать из обычного элемента предопределенный на момент написания этой статьи не существует, а очень бы хотелось!!
В данной статье мы опишем как всего в несколько действий сделать, один или несколько (хоть все) элементов справочника предопределенными.
Что характеризует элемент как предопределенный?Хоть и в таблицах СУБД присутствует поле _IsMetaData оно лишь является источником данных для свойства Предопределенный. Мы конечно можем записать в это поле 0х01. Однако это решит только вопорос пометки удаления (ее нельзя будет установить). Обратится к элементы по имени (Справочник.Ваюты.Рубли) мы конечно же не сможем. Поле _IsMetaData является скорее следствием. Причины же кроются куда глубже. Пречисление всех предопределенных объектов хранится в таблице конфигурации (Config). В записях с FileName XXXXXX-XXXX-XXXX-XXXXXXXX.1c {0, о структуре итих записей я и расскажу. Формат этих записей не так страшен как кажется. Я бы даже сказал более. "...это формат великолепен". Но, что бы Вам было более понятно, начну с рассмотрения сквозного примера.
От теории к практикеИтак нашей задачей будет изменение типа предопределенности для 2 элементов справочники валюты. Использовать будем конструктор и групповую обработку, результатов запроса.
С помощью Конструктора открываем файл запросов. Напомню что Ei должен быть версии 1.0.9 и выше, в предыдущих версиях, настройки групповой обработки хранились отдельно от файлов запроса. В данном контексте групповая обработка, это самое основное.
На первом этапе, нашей задачей, будет получить набор однотипных объектов, которые мы хотим сделать предопределенными. Я в данном случае использовал просто запрос. Сделаем теперь USD. и рубли предопределенными элементами, для этого перейдем на закладку групповая обработка и отметим наших "жертв". Для каждого элемента справочника, претендующего на роль предопределенного элемента, выполняются следующий набор обработок. Эти обработки имеют общие параметры и с помощью этих параметров одна обработок может предавать значения другой обработке. Теперь немого о них.
Как я уже говорил - формат хранения предопределенных данных просто великолепен. Великолепие его заключается в том что по средствам небольших текстовых преобразований и функции ЗначениеИзСтрокиВнутр(), мы получим дерево значений, где в качестве строк будут фигурировать предопределенные элементы. Остается только делом техники добавить туда нужны нам строки, преобразовать обратно в текст и запаковать в таблицу ConfigSave с изменением версии.
Что же делает пакет?
1. ПолучениеДереваПредопрЗначений - по типу данных определяет запись в таблице Config. Получает хранящиеся в ней данные преобразовывает их к дереву значений и полученные дерево сохраняет в параметрах "ПредопрЗначения"(поскольку данная фукнция обращается к СУБД в параметрах должна быть верна указана Строка соединения). Обработка выполняется только один раз для первой обрабатываемой строки результатов запроса.
ЕслиОбработкаСоединения()Тогда
2. ДобавлениеЭлемента - добавляет строки в дерево значений. Основное здесь то что для разных типов приладных объектов сосотав возможных определяемых данных разный, для Справчника например это только:
Для ПВХ к этому набору добавляется еще и Тип, Для планов счетов еще таблицы Видов субконто и признаков учета, и так далее. поэтому данная обработка является своего рода ядром, в котором вы можете попределить пренадлежность определенного значения к той или иной колонке. Если не ТипЗнч(Параметры.ПредопрЗначения)=Тип("ДеревоЗначений") Тогда
3. СохранниеИзменений - последняя обработка сохраняет внесенные изменения. Преобразовывает дерево значений к текстовому формату и запсывает измененную запись в таблицу ConfigSave с изменением версии. Обработка выполняется только один раз, для последней обрабатываемой строки результатов запроса.
Представление=СтрЗаменить(ЗначениеВСтрокуВнутр(Параметры.ПредопрЗначения),"{""#"",e603c0f2-92fb-4d47-8f38-a44a381cf235","{0");
Ну теперь после того как вы знаете что "вытворяют" это обработки, приспокойненько жмем кнопку "Выполнить", находсь при этом на закладе "Обработка результата". После чего перечитываем (открываем закрываем) конфигурацию в конфигураторе и наслождаемся наличием в предопределенных значениях наших любыимых валют. Скачать настройку можно здесь
|
Статьи >