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

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

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

Я бы хотел рассказать про возможность, с помощью которой можно легко размещать на формах типовых объектов (справочников, документов) свои реквизиты, не редактирую сами формы вообще. // Рассматриваются конфигурации БП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 не будет опубликован. Обязательные поля помечены *