Відкриття форм
1.1. Для відкриття форм слід застосовувати метод глобального контексту ВідкритиФорму (у разі використання версії платформи 1С:Підприємство 8.2 і більш ранніх версій — також ВідкритиФормуМодально). Застосування альтернативного способу, з отриманням форми та її подальшим відкриттям за допомогою методу ОтриматиФорму, не рекомендується. Винятки з цього правила можливі лише в особливих випадках (див. розділ нижче "Особливі випадки використання форм").Рекомендація зумовлена міркуваннямиВідкриття форм об'єктів за допомогою команди меню "Усі функції". Відкриття параметризованих форм. Блокувальне або незалежне відкриття форм об'єктів. Особливі випадки використання форм
Відкриття форм об'єктів за допомогою команди меню "Усі функції"
Відкриття параметризованих форм
Блокувальне або незалежне відкриття форм об'єктів
Особливі випадки використання форм
1.1. Для відкриття форм слід застосовувати метод глобального контексту ВідкритиФорму (у разі використання версії платформи 1С:Підприємство 8.2 і більш ранніх версій — також ВідкритиФормуМодально). Застосування альтернативного способу, з отриманням форми та її подальшим відкриттям за допомогою методу ОтриматиФорму, не рекомендується. Винятки з цього правила можливі лише в особливих випадках (див. розділ нижче «Особливі випадки використання форм»).
Рекомендація зумовлена міркуваннями
- підвищення стійкості коду, що працює з формою, завдяки розділенню програмного інтерфейсу для роботи з формою та деталей її внутрішньої реалізації,
- а також збереження єдиного стилю коду прикладних рішень.
Крім того, застосування глобального методу ВідкритиФорму гарантує виконання ініціалізації форми на сервері в обробнику ПриСтворенніНаСервері. Цей підхід допомагає зосередити весь код ініціалізації форми в одному місці та виключає "випадкове" звернення до сервера, пов'язане з ініціалізацією форми, між рядками коду
Форма = ОтриматиФорму(...)
та
Форма.ВідкритиФорму(...)
Див. також: розділ «Відкриття керованої форми» статті «Мінімізація кількості серверних викликів»
1.2. У випадках, коли форма потребує параметризації під час відкриття, усі її параметри слід указувати в наборі параметрів форми. Таким чином, набір параметрів форми декларативно описує можливості форми щодо її параметризації.
Параметри форми з цього набору можуть бути вказані у викликаючому коді під час отримання форми (ОтриматиФорму) або під час відкриття (ВідкритиФорму).
1.3. Не слід застосовувати інші способи параметризації форми під час відкриття. Наприклад, потрібно уникати звернення до методів і властивостей форми після її відкриття.
Наприклад, замість
МояФорма = Форма.ВідкритиФорму("ЗагальнаФорма.ПутівникПоСистемі"); МояФорма.Елементи.ГрупаКрок.ПоточнаСторінка = МояФорма.Елементи.ГрупаКрок.Сторінки.Привітання;
слід із тієї самої причини використовувати параметри форми:
Форма.ВідкритиФорму("ЗагальнаФорма.ПутівникПоСистемі", Новий Структура("РежимВідкриття", "Привітання"));
1.4 Для отримання результату роботи форми замість безпосереднього звернення до елементів і реквізитів форми
ФормаПитання = ОтриматиФорму("ЗагальнаФорма.ФормаПитання"); ФормаПитання.ВідкритиМодально(); Якщо ФормаПитання.БільшеНеПоказуватиНагадування Тоді // …
слід використовувати процедури-обробники сповіщень, які буде викликано після завершення роботи користувача з формою:
Сповіщення = Новий ОписСповіщення("БільшеНеПоказуватиНагадуванняЗавершення", ЦейОб'єкт); БільшеНеПоказуватиНагадування = ВідкритиФорму("ЗагальнаФорма.ФормаПитання",,,,, Сповіщення, РежимВідкриттяВікнаФорми.БлокуватиВесьІнтерфейс); ... &НаКлієнті Процедура БільшеНеПоказуватиНагадуванняЗавершення(БільшеНеПоказуватиНагадування, Параметри) Експорт Якщо БільшеНеПоказуватиНагадування = Невизначено Тоді Повернення; КінецьЯкщо; Якщо БільшеНеПоказуватиНагадування Тоді // … КінецьПроцедури
При цьому значення форми, що повертається, формується в коді модуля форми за допомогою методу форми Закрити.
Див. також: Обмеження на використання експортних процедур і функцій
1.5. Інші обмеження:
- Обробник події форми ПриВідкритті не повинен містити код для відкриття будь-якої іншої форми замість тієї, що відкривається.
- Не рекомендується виконувати програмне відкриття та закриття форми в одному обробнику. Такі дії мають бути рознесені в часі. Наприклад, закриття форми можна виконувати в обробнику очікування.
Відкриття форм об'єктів за допомогою команди меню "Усі функції"
2.1 Наступні види форм мають бути завжди доступні користувачу в режимі 1С:Підприємства з меню "Усі функції" незалежно від того, чи розміщені відповідні об'єкти в командному інтерфейсі застосунку:
-
основна форма списку (для всіх об'єктів)
-
основна форма обробки
-
основна форма звіту
Відкриття параметризованих форм
3.1 У випадках, коли форма потребує параметризації під час відкриття, призначена для відкриття лише за допомогою вбудованої мови й, як наслідок, не може бути відкрита з пункту меню "Усі функції", не слід призначати таку форму основною формою об'єкта.
3.2. Якщо ж в об'єкта немає інших форм, які могли б бути призначені основними, то слід зробити основною цю параметризовану форму. В обробнику ПриСтворенніНаСервері модуля форми потрібно перевіряти параметри форми й, якщо вони не заповнені, викликати виняток. Текст винятку повинен указувати користувачу причину, через яку форму не може бути відкрито.
3.3. При цьому не слід видавати виняток у тих випадках, коли форма відкривається із заданим параметром «АвтоТест». Наявність цього параметра означає, що отримання форми виконується спеціальним засобом автоматизованого тестування (наприклад, 1С: Автоматизована перевірка конфігурацій — для контролю дотримання стандартів розробки). У цьому випадку весь код обробника ПриСтворенніНаСервері повинен відпрацювати без помилок часу виконання (наприклад, унаслідок відсутніх параметрів форми, які не передаються за такого способу отримання форми).
Наприклад:
&НаСервері Процедура ПриСтворенніНаСервері(Відмова, СтандартнаОбробка) // Пропускаємо ініціалізацію, щоб гарантувати отримання форми під час передавання параметра "АвтоТест". Якщо Параметри.Властивість("АвтоТест") Тоді Повернення; КінецьЯкщо; // Приклад коду, який розраховує на заповнені параметри форми. Якщо Не ЗначенняЗаповнено(Параметри.Підстава) Тоді ТекстПовідомлення = НСтр("uk='Безпосереднє відкриття цієї форми не передбачено. Для відкриття форми можна скористатися командою ""Підібрати товари"" у формах документів.'"); ВикликатиВиняток ТекстПовідомлення; КінецьЯкщо; // далі йде логіка ініціалізації форми // … КінецьПроцедури
Блокувальне або незалежне відкриття форм об'єктів
4.1 За замовчуванням під час створення форм деяких типів об'єктів (довідників, планів видів характеристик тощо) для них установлюється режим відкриття з блокуванням вікна власника (властивість РежимВідкриттяВікна установлено в значення "Блокувати вікно власника"). Для таких форм передбачається, що робота з ними завжди виконується "за один підхід", без потреби перемикання на інші форми. Тим самим запобігається одночасному відкриттю кількох форм такого типу, і як наслідок, робочий простір користувача не "засмічується" зайвими вікнами.
4.2. Це значення платформи за замовчуванням рекомендується змінювати в тих випадках, коли форма є «робочим місцем», тобто за її допомогою здійснюється доступ до великого функціонального блоку. Зокрема, якщо під час роботи з формою у звичайних сценаріях роботи може знадобитися
- відкриття інших самостійних форм (звітів, довідників тощо) із глобального командного інтерфейсу застосунку;
- порівняння двох і більше об'єктів між собою;
а також якщо на панелі навігації форми
- міститься велика кількість переходів до пов'язаної інформації (наприклад, до підпорядкованих довідників);
- є переходи до параметризованих звітів.
Для таких форм необхідно встановити властивості РежимВідкриттяВікна значення "Незалежний".
Див. також розділ Форми — вибір: блокувальна або незалежна у посібнику зі стилю.
Особливі випадки використання форм
Діє для конфігурацій, що розробляються на платформі 1С:Підприємство 8.2 і більш ранніх версій.
5.1. В окремих обґрунтованих випадках з метою прискорення роботи клієнтського застосунку рекомендується кешувати часто використовувані форми, які не зчитують дані з інформаційної бази. Наприклад, це форми типу «Питання під час виконання якоїсь дії», форми з повідомленнями або з попередженнями.
У цих випадках рекомендується розмістити функцію для отримання форми в загальному модулі з повторним використанням значень, що повертаються, на час сеансу.
Наприклад:
// Повертає форму, яка використовується для інформування // користувачів про особливості редагування файлів у вебклієнті. Функція ОтриматиФормуНагадуванняПриРедагуванні() Експорт Повернення ОтриматиФорму("ЗагальнаФорма.НагадуванняПриРедагуванніФайлу"); КінецьФункції
і замість виклику методу ВідкритиФорму використовувати конструкцію вигляду:
ФормаПитання = РоботаЗФайламиКлієнтПовтВик.ОтриматиФормуНагадуванняПриРедагуванні(); ФормаПитання.ВідкритиМодально(); // далі виконати дію (отримання файлу для редагування) // …
Таке кешування забезпечує значне прискорення на повільних каналах зв'язку між клієнтським застосунком і сервером 1С:Підприємства.
5.2. За потреби параметризації кешованих форм пропонується скористатися одним із двох варіантів.
а) Якщо кількість комбінацій значень параметрів невелика, наприклад два-три значення, то слід кешувати два-три готові екземпляри форми в «розрізі» її параметрів. Наприклад, якщо форма має параметр ЗастосуватиДляВсіх типу Булеве, то в загальному модулі з повторним використанням значень, що повертаються, на час сеансу розміщується код вигляду:
Функція ОтриматиФормуНагадуванняПриРедагуванні(Знач ЗастосуватиДляВсіх) Експорт Повернення ОтриматиФорму("ЗагальнаФорма.НагадуванняПриРедагуванніФайлу", Новий Структура("ЗастосуватиДляВсіх ", ЗастосуватиДляВсіх)); КінецьФункції
а для отримання такої форми використовується конструкція вигляду:
ФормаПитання = РоботаЗФайламиКлієнтПовтВик.ОтриматиФормуНагадуванняПриРедагуванні(ЗастосуватиДляВсіх); Результат = ФормаПитання.ВідкритиМодально(); // далі виконати дію (отримання файлу для редагування) // …
В інших випадках доцільно розмістити в модулі форми експортну процедуру ВстановитиПараметриВикористання, за допомогою якої параметризувати форму перед відкриттям. Наприклад:
ФормаПитання = РоботаЗФайламиКлієнтПовтВик.ОтриматиФормуПитання(); ФормаПитання.ВстановитиПараметриВикористання(Текст, ЗастосуватиДляВсіхФайлів, ДіяЗаЗамовчуванням); Результат = ФормаПитання.ВідкритиМодально();
При цьому не слід застосовувати будь-які інші методи для кешування форм та їх параметризації перед відкриттям.
Див. також: Обмеження на використання експортних процедур і функцій
5.3. В окремих обґрунтованих випадках для зниження обсягу трафіку між клієнтським застосунком і сервером 1С:Підприємства допускається альтернативний спосіб ініціалізації «клієнтських» параметрів форми під час відкриття. До таких параметрів належать реквізити та властивості елементів форми, які можуть бути гарантовано ініціалізовані на клієнті без звернення до сервера.
У таких випадках необхідно розмістити в модулі форми експортну процедуру ВстановитиПараметриВикористання, приклад використання якої наведено вище.
Такі випадки мають бути прокоментовані в коді.
Див. також: Мінімізація кількості серверних викликів