Вывод реквизита добавленного в расширении, на форму элемента

1. work.sable 26 27.10.20 09:01 Сейчас в теме
Упрощенная задача:
1. не изменять конфигурацию, всё выполнять в расширении
2. в справочник "Склады" добавить реквизит "Виртуальный", с типом булево.
3. вывести новый реквизит на форму

Делаем:
1. расширение уже есть, работает.
2. захватываем в расширение справочник
добавляем в расширении реквизит справочника
3. захватываем в расширение форму элемента справочника
?? в панели реквизитов формы у нас реквизит "Объект" - серый, просто перетащить его на форму не выйдет(

Варианты решения проблемы:
1. захватить реквизит формы "Объект" в расширение
- в расширение захватывается пол конфигурации, это избыточно. не будет понятно что захвачено "просто так", а что захвачено для доработок.

2. добавить реквизит программно:
- нет наглядности, не то удобство работы

3. добавить на форму реквизит "Виртуальный", с типом булево.
вытащить реквизит формы на форму, настроить его внешний вид, завязать на него всю необходимую логику.
при создании на сервере заполнять реквизит формы из реквизита объекта
перед записью на сервере заполнять реквизит объекта из реквизита форы.
+ наглядность, удобность работы как будто это реально реквизит объекта.
- дублирование реквизитов объекта реквизитами формы. А если так надо вывести 100 новых реквизитов объекта, то создавать ещё и 100 реквизитов формы?
- лишний код (при создании и перед записью)

Вопросы:
1. есть мб способ вывести реквизит объекта (созданный в расширение) на форму элемента (захваченную в расширение), не захватывая Объект?
2. мб есть у кого другие идеи, которые будут лучше чем Варианты решения проблемы № 3?
По теме из базы знаний
Найденные решения
20. EVKash 16 30.10.20 10:51 Сейчас в теме
(16) Вы думаете "здесь и сейчас", забывая про обновления основной конфигурации.
Программное изменение формы - это способ поиметь минимум проблем в будущем.
Удачных вам обновлений.
PS. Уверен, что походив по граблям, вы измените свое мнение.
SeVeS; work.sable; +2 Ответить
2. RustamZz 27.10.20 09:11 Сейчас в теме
(1) Добавить Объект в расширение, а потом удалить все лишние объекты, которые он с собой притянет.
work.sable; +1 Ответить
4. user633533_encantado 11 27.10.20 09:35 Сейчас в теме
Пункт 2 единственно верный, все остальное: лишние объекты в расширении.
5. work.sable 26 27.10.20 09:48 Сейчас в теме
(4) Не согласен, но это и не важно. Тут нет "верного" решения, у каждого решения свои плюсы/минусы.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 27.10.20 09:11 Сейчас в теме
(1) Добавить Объект в расширение, а потом удалить все лишние объекты, которые он с собой притянет.
work.sable; +1 Ответить
3. work.sable 26 27.10.20 09:27 Сейчас в теме
(2) Как проверить что удалил всё? допустим я проверю справочники, константы. Что ещё он может подтянуть?
Форма от такого не поломается?
6. RustamZz 27.10.20 09:48 Сейчас в теме
(3) Функциональные опции, картинки, РС. Раньше формы при добавлении в расширение всегда так себя вели. Удаляете все что сами не добавляли. Если что-то используется, то не удалится.
14. comptr 35 28.10.20 11:09 Сейчас в теме
(1)
2. добавить реквизит программно:
- нет наглядности, не то удобство работы

Какая наглядность нужна? Три строчки кода внутри ПриСозданииНаСервереПосле:
НовыйЭлемент = Элементы.Вставить("Виртуальный", Тип("ПолеФормы"), ЭлементРодитель, ЭлементПеред);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПутьКДанным = "Объект.Виртуальный";

При обновлении форма, максимум, нужно будет поля ЭлементРодитель и ЭлементПеред заново определить.
_Vovik; Help-GROUP; insurgut; +3 Ответить
15. work.sable 26 30.10.20 03:34 Сейчас в теме
(14)
Проходит 2 года, и вот на форме уже 23 элемента выведенных программно, в т.ч. и различные табличные поля.
Наглядно увидеть как оно выглядит из конфигуратора - не возможно, а стоит задача "немного изменить положения элементов на форме, раскидать элементы по группам, где то шрифт поставить жирный и тд и тп"

Как это делается когда выведено элементами:
у тебя всё перед глазами, ты перемещаешь куда нужно элементы и сразу видишь результат.

Вот что я подразумеваю под наглядностью и удобством работы.
17. tetraren 35 30.10.20 09:19 Сейчас в теме
(15) Обычно наоборот, через два года так же 2 элемента из расширения, а в исходной базе добавилось 23. Тут никаких проблем.

Зато если добавятся еще расширения, расширяющие ту же форму - это всё будет хорошо работать, что актуально, учитывая, что 1С недавно придумала патчи.
4. user633533_encantado 11 27.10.20 09:35 Сейчас в теме
Пункт 2 единственно верный, все остальное: лишние объекты в расширении.
5. work.sable 26 27.10.20 09:48 Сейчас в теме
(4) Не согласен, но это и не важно. Тут нет "верного" решения, у каждого решения свои плюсы/минусы.
7. user633533_encantado 11 27.10.20 09:54 Сейчас в теме
(5) а я и не говорю о верном-неверном. Другое решение ведет к избытку объектов в расширении.

Я такое уже видел: открываешь расширение, а там пол конфигурации сидит, а все из-за неоптимальных решений.


И Что значит " нет наглядности, не то удобство работы" ?

Да и вы в курсе, что в некоторых типовых даже форму в расширение захватывать не надо для вашей задачи, не то что объект ?
8. work.sable 26 27.10.20 10:42 Сейчас в теме
(7)

Другое решение ведет к избытку объектов в расширении.
Я такое уже видел: открываешь расширение, а там пол конфигурации сидит, а все из-за неоптимальных решений.

Вариант решения №3 не предполагает захват лишней информации в расширение.

И Что значит " нет наглядности, не то удобство работы" ?

Визуально работать с формой легче. Ты наглядно видишь что, где и как.

Да и вы в курсе, что в некоторых типовых даже форму в расширение захватывать не надо для вашей задачи, не то что объект ?

Мне не нужен допреквизит/ допсведение. Если имели ввиду что-то другое, то это интересно.
10. user633533_encantado 11 27.10.20 11:55 Сейчас в теме
(8) имелось ввиду что-то другое. В типовых конфигурациях семейства УТ, ERP есть общий модуль, предназначенный для модификации конфигурации. Достаточно захватить в расширение только его, чтобы иметь возможность программно менять формы многих основных объектов не хватая что попало в расширение.

А "работать с формой легче" не оправдание неоптимального вмешательства.
11. work.sable 26 28.10.20 02:49 Сейчас в теме
(10) Так. Про переопределяемые модули я вкурсе, но:
даже форму в расширение захватывать не надо для вашей задачи, не то что объект


Как добавить реквизит в таком случае?


А "работать с формой легче" не оправдание неоптимального вмешательства.

Код должен быть понятный, легко модифицируемый, а результат - наглядный. Программный вывод элементов на форму во всех случаях - избыточное невмешательство. Да, бывает что без программного создания совсем не обойтись. А бывает где можно обойтись без него, но с ним проще/наглядней/оптимальней. Вот в этом случае программное создание - оправдано. Имхо, конечно
13. user633533_encantado 11 28.10.20 09:52 Сейчас в теме
(11)
Как добавить реквизит в таком случае?

Ладно, не прав - объект нужно. но и все.

Но добавлять форму в расширение для наглядности, это как если писать для расширения отчет и брать туда все объекты из запроса, чтобы его можно было в конструкторе открывать, а то не наглядно...
16. work.sable 26 30.10.20 03:40 Сейчас в теме
(13)
а то не наглядно...


Любая палка имеет два конца, и возможно в следующей подобной задаче я приму вашу точку зрения (зависит от специфики задачи)
Ведь в каждом отдельном случае мы:
1. Сначала учитываем общие концепции и правила
2. Берем в расчет специфику текущей задачи, конфигурации и тд
3. Добавляем ко всему это личное мнение и опыт.

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

мы получаем свой подход.

И (я никого не заставляю думать так же) моё имхо: для общего случая вывода в расширение новых элементов формы, если там нет динамического вычисления количества элементов (например колонок) - не создавать их кодом, а сделать прям в форме.
18. tetraren 35 30.10.20 09:23 Сейчас в теме
(13) Объект лучше тоже не добавлять, имхо. Добавить реквизит формы и заполнять его из реквизита объекта, а при записи наоборот - заполнять реквизит текущегообъекта из реквизита формы. Тогда в расширении получается вообще минимум заимствований, что очень хорошо.
19. user633533_encantado 11 30.10.20 10:03 Сейчас в теме
(18) Но чтобы заполнить новый реквизит объекта его надо этому объекту добавить, а это не сделать без добавления объекта в расширение.
21. tetraren 35 30.10.20 14:40 Сейчас в теме
(19) Сделать, на программном уровне новый реквизит в объекте виден, проверьте.
22. user633533_encantado 11 30.10.20 15:30 Сейчас в теме
(21) Не путайте реквизит формы и реквизит объекта. Ну создали в реквизит формы, а писать вы его при закрытии формы куда будете ?
23. tetraren 35 30.10.20 15:59 Сейчас в теме
(22) Не путаю, прочитайте внимательно первое моё сообщение и попробуйте его воспроизвести. Это хороший прием, чтобы не наследовать Объект формы и все связанные с реквизитами объекты метаданных. Таким образом можно наследовать только одну форму и всё. Очень рекомендую.

Обратите внимание, что в ПриЗаписиНаСервере надо писать не в Объект, а в ТекущийОбъект
24. user633533_encantado 11 30.10.20 17:19 Сейчас в теме
(23) Что писать ? В какой реквизит объекта вы запишите свои данные если у объекта нет этого реквизита ?
25. tetraren 35 30.10.20 20:04 Сейчас в теме
(24) На самом деле он есть.

Допустим, добавляете в расширении реквизит1 в унаследованный документ1. Реквизиты формы, включая реквизит "Объект" не заимствуете.

В реквизите формы документа "Объект" в расширении вы добавленный реквизит1 не видите, поэтому через интерфейс связать с элементами формы не сможете. Однако программно он виден, и с ним можно работать.

Далее добавляете в форму расширения реквизитФормы1, добавляете элементы формы, ссылающиеся на этот реквизитФормы1. Заполняете его при открытии из Объект.Реквизит1. И уже с реквизитФормы1 работаете, он работает нормально.

Спрашиваете, почему бы не создать программно элемент формы, и сразу не указать в нем путь к данным Объект.Реквизит1? Ну, у меня не получилось заставить это работать, возможно был глюк платформы на тот момент. При открытии реквизит пустой, даже если данные есть. Можете попробовать и напрямую, возможно в текущей версии это исправили.

Повторюсь, всё затевается для того, чтобы не наследовать реквизит формы "Объект". Эта задача успешно решена. Надеюсь, теперь стало понятней.
26. user633533_encantado 11 02.11.20 10:42 Сейчас в теме
(25) Мы просто друг друга не поняли. Я имел ввиду, что в расширение все равно придется брать объект конфигурации "документ1", чтобы дать ему реквизит. Далее нужна только форма, чтобы програмно вывести на нее новые реквизиты. Если есть типовые модули типа "модификация конфигурации" и они вызываются при создании формы, то и форму брать в расширение уже не надо, достаточно взять этот модуль и перехватить форму там.
tetraren; +1 Ответить
27. tetraren 35 02.11.20 19:36 Сейчас в теме
(26) Да, похоже что просто недопонимание. По поводу процедуры в типовом модуле - да, это шикарно, когда такое есть, но к сожалению не везде есть такая роскошь. Хотя 1С явно старается исправить ситуацию, и это замечательно.

Ведь самое лучшее наследование формы в расширении - когда можно не наследовать её вовсе!
9. пользователь 27.10.20 11:13
Сообщение было скрыто модератором.
...
12. пользователь 28.10.20 02:57
Сообщение было скрыто модератором.
...
20. EVKash 16 30.10.20 10:51 Сейчас в теме
(16) Вы думаете "здесь и сейчас", забывая про обновления основной конфигурации.
Программное изменение формы - это способ поиметь минимум проблем в будущем.
Удачных вам обновлений.
PS. Уверен, что походив по граблям, вы измените свое мнение.
SeVeS; work.sable; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот