Підписка на подію ОбробкаОтриманняФорми для звичайних форм
Передмова
Для чого може знадобитися відловлювати подію набуття форми? Все просто. При зміні типових конфігурацій дуже важливо зберегти можливості подальшого оновлення з пакетів постачальника. У випадках, коли розробник змінює типову форму об'єктів у конструкторі, при подальшому оновлення механізм порівняння/об'єднання не зможе детально відобразити, які елементи та їх властивості були змінені на формі. Тому велика можливість, що оновлення конфігурації може пройти некоректно.
Трохи теорії
Для спрощення процесу наступних оновлень типової конфігураціїрекомендується змінювати типові форми об'єктів програмним чином. Наприклад, якщо нам потрібно додати форму поля введення, то в обробнику форми "ПередВідкриттям" (для звичайних форм) необхідно додати відповідний програмний код. Для керованих форм платформа підтримує створення підписки на подію "Обробка ОтриманняФорми", яка дозволяє втручатися у процес створення форми на сервері. Ця можливість набагато спрощує зміну форм. Фактично, у деяких ситуаціях розробник може взагалі не чіпати типову форму, а змінювати її програмно у процедурі-обробнику підписки на подію.
Незрозуміло чому, але платформа 1С:Підприємство 8.2 не підтримує створення підписок отримання форми об'єкта для звичайних форм. Але є нестандартний спосіб, який дозволяє відловити подію набуття звичайної форми і надалі впливати на її властивості та склад. Саме про нього і йтиметься далі.
Реалізація
Для того, щоб відловлювати подію набуття звичайної форми надійде наступним чином. Насамперед для конфігурації включимо використання керованих формзвичайному додатку.

У параметрах конфігурації не забудьте поставити режим редагування в "Керована програма та звичайна програма".
Тепер ми можемо створити підписку на подію і пов'язаний з нею обробник, в якому змінюватимемо форму. Для цього додамо загальний серверний модуль із можливістю виклику експортних процедур з боку клієнта. Назвемо його "DEV_ЗмінаФорм".

Тепер ми можемо створити необхідну передплату на подію та прив'язати до створеної вище процедури. Відразу зазначу, що в поточному прикладі ми змінюватимемо звичайну форму елемента довідника "Банки", тому в джерелі передплати на подію встановимо значення "Довідник Менеджер.Банки".

Підписку на подію створено, процедуру-оброблювача визначено, тепер залишилося найцікавіше - треба прив'язати підписку на подію до звичайної форми елемента довідника "Банки". Для цього створимо нову керовану форму елемента довідника і зробимо її основною (налаштування замінимо звичайну форму на керовану). Після цього у події форми "ПріВідкриття" додамо наступний програмний код:
Про його призначення буде зрозуміло трохи згодом. Тепер довідник "Банки" виглядає так:

Зауважте, що створена нами керована форма елемента не містить елементів на формі, оскільки вони в даному випадку не потрібні. При отриманні цієї форми викликається обробник отримання форми "DEV_ЗмінаФорми", в якому ми можемо отримати звичайну форму та зробити всі необхідні програмні дії. Далі наведено програмний код обробника для зміни звичайної форми елемента довідника "Банки".
Потрібно сказати, що метод "Закрити()" в обробнику "ПріВідкриття" використовується, щоб керована форма нез'являлася на екрані користувача. Якби ми поставили прапор "Відмова" в обробнику "ПриСтворенні на Сервері" або встановили прапор "Стандартна Обробка" в БРЕХНЯ в обробнику підписки на подію, то виникла б помилка з ідентифікатором форми або неможливості роботи з відкритою формою. На даний момент іншого способу приховати від користувача "проміжну" форму не знайшов.
Що на практиці
Запустивши режим "підприємства", ми побачимо наступні зміни форми елемента довідника "Банки".

При цьому для довідника "Банки" в конфігурації ми змінили налаштування підтримки тільки для безпосередньо об'єкта в режим "Редагується зі збереженням підтримки".

Виконавши вищезгадані дії, ми зберегли максимальну сумісність із конфігурацією постачальника.
Що в результаті
Таким чином, ми внесли мінімальні зміни в типові конфігураційні об'єкти і змінили форму як нам це необхідно. Тут варто зауважити, що якщо потрібно змінити програмний код обробників елементів форми, іншого виходу немає, крім як зняти форму з підтримки і вносити зміни в обробнику подій.
Даний підхід має великий мінус - для створення "проміжної" керованої форми буде виконано зайвий виклик сервера, не кажучи вже про те, що на створення форми будуть витрачені ресурси сервера 1С:Підприємства, хоч і незначні.