Изменение ОБЫЧНОГО объекта на ПРЕДОПРЕДЕЛЕННЫЙ




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

Использовать «НайтиПоКоду» уже даже не смешно, особенно когда, например, справочник с длиной кода 0.Wink 

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

Предыстория:

Когда давным давно задавался этим вопросом, что я только не читал на разных форумах!
Например:
1) Создавать новую сущность и все хранить в константах.
2) Создавать предопределенный элемент, копировать все реквизиты, а затем  обработкой «ПоискИЗаменаЗначений» менять обычный на предопределенный, в конечном итоге удаляя первичный элемент.
3) И даже наткнулся на совсем
удивительную ВЕЩЬ, в которую даже не стал вникать = )))

Далее я приведу описание простенькой обработки для работы с предопределенными данными (может, кому понадобится):

1) В конфигураторе у объекта метаданных добавляем нужные Предопределенные элементы:
 

2) Если у объекта метаданных изменить свойство «Обновление предопределенных данных» на «Не обновлять автоматически«, то при обновление «Конфигурации БД» НЕ БУДУТ СОЗДАНЫ предопределенные элементы. Изменять это свойство или нет, решать Вам.


3) Запускаем обработку. 

При выборе редактируемой ссылки автоматически в список выбора «Имя предопределенных данных» загружаются все возможные варианты из метаданных этого объекта. Обработка изменяет (если стоит галочка, то в режиме «ОбменДанными.Загрузка = Истина«) реквизит «ИмяПредопределенныхДанных» у редактируемого объекта, а в случае, если уже существует другой объект с таким же именем ПД, то оно очищается и объект становится обычным.

П.С. Работает в управляемой и обычной форме, но тестировал в 8.3.7 в режиме совместимости 8.3.6 = ))

19 Comments

  1. Xershi

    Думаю такой трюк до 8.3.6 не прокатит.

    Reply
  2. Xershi

    Или тут идет речь, что в базе уже заведен через конфигуратор предопределенный элемент, а вы просто меняете ссылки ненужного элемента на предопределенный?

    Reply
  3. KilloN

    (2) Xershi, Да именно))

    Я делаю так:

    1) Добавляю предопределенные элементы

    2) Меняю свойство «Обновление предопределенных данных» на «Не обновлять автоматически», чтобы элементы не создавались при обновлении.

    3) Делаю обновление и использую обработку.

    Reply
  4. Xershi

    (3) так а смысл, чтобы уникальность поправить в любой момент после обновления, а не сразу?

    Reply
  5. Xershi

    Хотя посмотрел на 8.3.5 такая штука есть. А вот на 8.2.18 нет.

    Reply
  6. KilloN

    (4) Xershi, Очень часто выясняется, что какой либо элемент необходимо использовать в коде только через продолжительное время.

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

    Reply
  7. KilloN

    (5) Xershi, Я посмотрел, на 8.3.6 в режиме совместимости 8.2 не работает((. Вообще нет такого реквизита «ИмяПредопредленногоЭлемента«

    Reply
  8. Xershi

    (6) для юзера соглашусь это обработка будет очень полезна. Для программиста я бы сказал просто познавательная штука.

    Reply
  9. KilloN

    (8) Xershi, Ты знаешь компании, где юсеры ползают в конфигуратор, кроме как сделать копию?)))

    Reply
  10. avto1c

    Если с обновлением приходит ещё один предопределённый элемент, а предопределённые данные не обновляются автоматически, что тогда?

    Reply
  11. Xershi

    (9) назвать не назову, но такие есть и их можно даже на ИС встретить.

    Reply
  12. KilloN

    (10) avto1c, При обмене нужно поставить не «взять из файла», а объединить с приоритетом из … Если я выбрал из файла то он не затирает мои предопределенные)))

    Reply
  13. KilloN

    (11) Xershi, Я знал бухгалтера, которая сама конфигурацию исправляла как ей нужно в 7.7. После перехода на 8-ку привычки она не изменила. Несколько часов ошибки после нее исправлял))

    Reply
  14. webester
    Когда давным давно задавался этим вопросом, что я только не читал на разных форумах!

    Вот этого не читали http://infostart.ru/public/275145/ ? по моему ответы там вполне исчерпывающие на ваш вопрос.

    Reply
  15. KilloN

    (14) webester, Да этого не читал))

    Когда я искал похожие публикации, то в поиске точно я точно не вводил «НайтиПоКоду» или «НайтиПоНаименованию», а что то похожее на мое наименование публикации.

    После этого удаляем тот Рубль, который стал нам не нужен.

    Правда в статье я не нашел ничего про свойство «Обновление предопределенных данных».

    Reply
  16. avto1c

    (12) в статье

    при обновление «Конфигурации БД» НЕ БУДУТ СОЗДАНЫ предопределенные элементы

    Дополни статью, как все таки добавляются предопределённые элементы.

    Reply
  17. KilloN

    (16) avto1c, Чем у меня в Торговле не добавляются если свойство «Обновление предопределенных данных» в «Не обновлять автоматически».

    А ты где проверял?)

    Reply
  18. kuzyara

    Нашел ошибку:

     ИначеЕсли Метаданные.ПланыВидовХарактеристик.Индекс(Мд) > 0 Тогда

    заменить на

     ИначеЕсли Метаданные.ПланыВидовХарактеристик.Индекс(Мд) >= 0 Тогда
    Reply
  19. KilloN

    Да как сделал, в 15 году больше не менял обработку)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *