Как размещать на формах типовых объектов свои элементы, не изменяя сами объекты (Обычное приложение)

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

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

Я бы хотел рассказать про возможность, с помощью которой можно легко размещать на формах типовых объектов (справочников, документов) свои реквизиты, не редактирую сами формы вообще. // Рассматриваются конфигурации БП2 и ЗУП2, в остальных, думаю, можно сделать аналогичным способом.

Данный метод не подходит, если необходимо серьезно изменить форму, добавить свои обработчики событий. В таком случае вам следут обратиться к статье TormozIt – «Методика переопределения и вызова обработчиков событий формы в 1С 8».

Мы рассматриваем простой пример, когда вы добавляете в документ и его ТЧ несколько реквизитов и просто хотите, чтобы они показывались на форме объекта.

Чтобы не трогать саму форму, мы вполне можем добавить в ее модуль нужные поля ввода и колонки в табличное поле, связанное с ТЧ, программно:

Колонка = Форма.ЭлементыФормы.ИмяТП.Колонки.Добавить("ИмяКолонки", "ЗаголовокКолонки");

Колонка.УстановитьЭлементУправления(Тип("ПолеВвода"));

Колонка.Данные = "ИмяКолонки";

И поместить вызов этой процедуры в обработчике «При открытии».

Если бы в платформе была подписка на событие формы «При открытии», мы могли бы использовать ее, и нам бы не пришлось менять модуль формы.

 Поскольку данной функциональности в платформе нет, будем использовать обходной способ.

Способ заключается в том, что почти в любой типовой форме справочника или документа присутствует обработчик «При открытии».

В нем, в частности, используется механизм нумерации объектов:

МеханизмНумерацииОбъектов.УстановитьДоступностьПоляВводаНомера(Метаданные(), ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.Подменю,ЭлементыФормы.Номер);

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

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

Этот факт идеально подходит для наших целей.

Все что нам остается – разместить в конце этой процедуры примерно такой код:

модСобственныеПроцедурыИФункции .ДоработатьФормуПриОткрытии(ФормаОбъекта);

И в этой процедуре из собственного модуля мы спокойно можем размещать элементы на форме или колонки в ТП, менять привязки, изменять текст шапки какого-нибудь типового элемента и т.д.

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

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

Добавление колонок в ТП мы сделаем, используя данный метод, поэтому для изменения формы N документов нам потребуется изменить только один типовой модуль.

Данный метод, безусловно, не является универсальным, но в некоторых случаях может облегчить жизнь.

12 Comments

  1. Yashazz

    Боян…

    Reply
  2. aspirator23

    (1) Поддерживаю. Было…

    Reply
  3. Feelthis

    У кого-то было, у кого то — нет 🙂

    Reply
  4. 1cmax

    дада, иногда не обращаешь внимания, на то что под носом

    Reply
  5. nalogos

    Типового подхода нет.

    но можно поизгаляться с программным добавлением элементов формы и дело это неблагодарное.

    Как делаем мы.

    1. Перехват событий формы.

    2. Программное отрисовка формы. Элементы формы лучше привязывать к уже имеющимся, могу порекомендовать обратить внимание на событие формы <ОбновлениеОтображения>

    3. События модуля можно подписатся на события.

    Очень помогли почти готовые решения такие как компиляция формы.

    Reply
  6. artbear

    (5) nalogos, как подписываетесь на события формы? Через событие менеджера метаданного? Или какойто новый способ нашли?

    Reply
  7. Yashazz

    Я вообще наворотил свой механизм, который заключается в:

    1. Перехвате универсальных вызовов, расположенных в большинстве форм в инициализации, перед и при открытии;

    2. Создании отдельной закладки самой формы, в её коллекции страниц;

    3. Размещении всего нужного на этой закладке (точно копируя некий образец, хоть бы и иную форму), чтобы меньше морочиться с привязками;

    4. Навешивании событий на эти элементы формы.

    Reply
  8. p1l1gr1m

    (7) (7) напиши статью о своем способе

    Reply
  9. kng67

    Полезная тема.

    У нас дописаны на некоторых формах отдельные страницы, которые приходится восстанавливать после обновления.

    Как я понимаю, воспользовавшись советами участниками обсуждения данной темы, можно обойти эту ситуацию.

    Reply
  10. Yashazz

    (8) Так уж вроде всё рассказал. На статью там не хватит, если только каждый блок и каждый этап описывать сверхдетально.

    Reply
  11. Roman24

    (10) ну так опиши сверхдетально

    Reply
  12. s_vidyakin

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

    Reply

Leave a Comment

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