Переведення конфігурацій на платформі "1С:Підприємство 8.2" на платформу "1С:Підприємство 8.3" без режиму сумісності з версією 8.2
У документі наведено методику забезпечення сумісності прикладних рішень, розроблених на платформі "1С:Підприємство 8.2", з платформою "1С:Підприємство 8.3". Цей процес умовно поділяється на два етапи — Підготовчий і Фінальний.Підготовчий етап. Конфлікт імен властивостей. Конфлікт імен картинок. Зміна властивостей фіксованої структури. Розміщення у тимчасовому сховищі несеріалізованих значень. Перегляд роботи з наперед визначеними елементами в РІБ. Фінальний етап. Перейменування методів і властивостей. Доопрацювання механізмів роботи з відборами, умовним оформленням, групуваннями та порядком у динамічних списках. Запит із ключовим словом ИТОГИ ПО ОБЩИЕ і вивантажений у режимі ОбходРезультатаЗапроса.ПоГруппировкам. Зміни імен класів COM-об'єктів. Відмова від події НачалоВыбораИзСписка для полів введення в режимі вибору зі списку. Відмова від властивості КнопкаСпискаВыбора для полів введення. Підтримка nux-клієнта. Приховати або вимкнути механізми в nux-клієнті, які не розраховані на роботу в ОС nux. Елемент керування ПолеHTMLДокумента та поле форми типу Поле HTML документа. Задіяти можливості платформи "1С:Підприємство 8.3" для уніфікації роботи під ОС nux і Windows. Відмова від усіх модальних вікон. Приклад переведення методу глобального контексту ОткрытьФормуМодально на ОткрытьФорму. Приклад переведення питання в обробниках ПередЗакрытием. Приклад переведення методу ОткрытьМодально об'єкта ДиалогРасписанияРегламентногоЗадания на Показать. Додаткові відомості щодо роботи з об'єктом ОписаниеОповещения
Зміна властивостей фіксованої структури
Розміщення у тимчасовому сховищі несеріалізованих значень
Перегляд роботи з наперед визначеними елементами в РІБ
Перейменування методів і властивостей
Зміни імен класів COM-об'єктів
Відмова від події НачалоВыбораИзСписка для полів введення в режимі вибору зі списку
Відмова від властивості КнопкаСпискаВыбора для полів введення
Приховати або вимкнути механізми в Linux-клієнті, які не розраховані на роботу в ОС Linux
Елемент керування ПолеHTMLДокумента та поле форми типу Поле HTML документа
Задіяти можливості платформи "1С:Підприємство 8.3" для уніфікації роботи під ОС Linux і Windows
Відмова від усіх модальних вікон
Приклад переведення методу глобального контексту ОткрытьФормуМодально на ОткрытьФорму
Приклад переведення питання в обробниках ПередЗакрытием
Приклад переведення методу ОткрытьМодально об'єкта ДиалогРасписанияРегламентногоЗадания на Показать
Додаткові відомості щодо роботи з об'єктом ОписаниеОповещения
У документі наведено методику забезпечення сумісності прикладних рішень, розроблених на платформі "1С:Предприятие 8.2", з платформою "1С:Предприятие 8.3". Цей процес умовно поділяється на два етапи — Підготовчий і Фінальний.
Підготовчий етап
Дії цього етапу рекомендується виконати до переходу на "1С:Предприятие 8.3" з вимкненим режимом сумісності. Виконання цих дій не порушує зворотної сумісності — конфігурація може продовжувати випускатися на "1С:Предприятии 8.2" або "1С:Предприятие 8.3" з увімкненим режимом сумісності з 8.2.
Щодо кожної проблеми несумісності надається коротка інструкція з виявлення «проблемних» місць у конфігурації та виконання адаптації.
Конфлікт імен властивостей
Не можна використовувати імена змінних, що збігаються з новими властивостями, які з'явилися в "1С:Предприятии 8.3":
- Нова властивість ЭтотОбъект у керованих формах і загальних модулях.
- Нові властивості в керованих формах:
- АвтоНавигационнаяСсылка
- НавигационнаяСсылка
- ВертикальнаяПрокрутка
- ОписаниеОповещенияОЗакрытии
Для усунення несумісності необхідно знайти змінні, реквізити форм із такими назвами та перейменувати їх.
Конфлікт імен картинок
Не можна використовувати імена картинок, що збігаються з іменами з бібліотеки картинок. Під час реструктуризації видається повідомлення про неунікальність імен картинок.
Для усунення несумісності необхідно виявити картинки з неунікальними іменами (виконати реструктуризацію у версії 8.3 на копії метаданих) і перейменувати їх.
Зміна властивостей фіксованої структури
У "1С:Предприятии 8.3" під час присвоєння значень властивостям фіксованої структури (ФиксированнаяСтруктура) виникає помилка «Поле об'єкта недоступне для запису».
Для усунення несумісності необхідно:
- Виявити всі місця присвоювання значень властивостям фіксованої структури:
- Функціональним тестуванням основних сценаріїв роботи;
- Або пошуком конструктора Новый ФиксированнаяСтруктура за модулями конфігурації та аналізом щодо зміни окремих властивостей створеної структури;
- Замість зміни окремих властивостей фіксованої структури слід повністю створювати фіксовану структуру заново або замінити її використання на аналогічний тип Структура.
Розміщення у тимчасовому сховищі несеріалізованих значень
У "1С:Предприятии 8.3" під час розміщення у тимчасовому сховищі значень, серіалізація яких не підтримується (наприклад, ДокументОбъект.< Имя документа> , СправочникОбъект.< Имя справочника> тощо), виникає помилка «Передане значення не може бути розміщено у тимчасовому сховищі».
Для усунення несумісності необхідно:
- Виявити всі місця розміщення значень у тимчасовому сховищі (пошуком методу глобального контексту ПоместитьВоВременноеХранилище);
- Перевірити, що можлива серіалізація типів значень об'єктів, які розміщуються у тимчасовому сховищі. Для цього необхідно звіритися із синтакс-помічником, переконавшись, що в групі "Доступность" явно зазначено фразу "Сериализуется". При цьому слід відрізняти серіалізацію від XDTO-серіалізації та XML-серіалізації. Наприклад, для типів СправочникОбъект.< Имя справочника> серіалізація не підтримується, хоча підтримується XDTO-серіалізація та XML-серіалізація.
- Якщо у тимчасове сховище значень розміщується несеріалізоване значення, слід переглянути проєктне рішення.
Перегляд роботи з наперед визначеними елементами в РІБ
У "1С:Предприятии 8.3" у дочірніх вузлах РІБ наперед визначені елементи автоматично не створюються (і не оновлюються під час змін у метаданих), а мають бути передані з головного вузла разом зі змінами конфігурації.
Для усунення несумісності необхідно:
a) забезпечити завантаження повідомлення обміну в підлеглий вузол РІБ до виконання іншого прикладного коду, який звертається до наперед визначених елементів, отримуваних із головного вузла;
b) у прикладній логіці завантаження даних із головного вузла (обробник події ПриПолученииДанныхОтГлавного, правила реєстрації об'єктів) уникати звернень до наперед визначених елементів, оскільки немає гарантії, що вони вже були завантажені з повідомлення обміну;
c) код обробників оновлення ІБ, який обробляє наперед визначені елементи, не повинен виконуватися в підлеглих вузлах РІБ:
Если ПланыОбмена.ГлавныйУзел() = Неопределено Тогда // Заповнення наперед визначених елементів... КонецЕсли;
Фінальний етап
Цю процедуру необхідно обов'язково виконувати безпосередньо після переведення розробки конфігурації на "1С:Предприятие 8.3" і вимкнення режиму сумісності.
Щодо кожної проблеми надається коротка інструкція з виявлення «проблемних» місць у конфігурації та виконання переходу.
Перейменування методів і властивостей
У "1С:Предприятии 8.3" змінено імена властивостей і методів деяких об'єктів (див. таблицю 1).
Для переходу на версію 8.3 необхідно знайти місця використання цих властивостей і методів та замінити всі їх використання в конфігурації згідно з таблицею.
Таблиця 1 — Перейменування методів і властивостей у версії 8.3
|
Що перейменовано |
Стара назва |
Нова назва |
|---|---|---|
|
Перейменовано ім'я властивості керованої форми. |
ЭтаФорма (ThisForm) |
ЭтотОбъект (ThisObject) |
|
Перейменовано ім'я типу менеджера перерахунків регістру розрахунку |
РегистрРасчетаПерерасчеты< Имя регистра расчета> |
ПерерасчетыМенеджер< Имя регистра расчета> |
|
Запис таблиці зовнішнього джерела даних. Змінено лише англійські імена. |
ExternalDataSourceRecord |
ExternalDataSourceTableRecord |
|
Набір записів зовнішнього джерела даних. Змінено лише англійські імена. |
ExternalDataSourceRecordSet |
ExternalDataSourceTableRecordSet |
|
Для менеджерів регістру накопичення залишків і регістру бухгалтерії перейменовано методи встановлення та отримання розрахованих підсумків |
ПолучитьПериодРассчитанныхИтогов (GetTotalsPeriod) |
ПолучитьМаксимальныйПериодРассчитанныхИтогов (GetMaxTotalsPeriod) |
|
УстановитьПериодРассчитанныхИтогов (SetTotalsPeriod) |
УстановитьМаксимальныйПериодРассчитанныхИтогов (SetMaxTotalsPeriod) |
|
|
Для об'єктів, що описують тестовані елементи форми, змінено ім'я властивості, що містить заголовок елемента |
Заголовок (Title) |
ТекстЗаголовка (TitleText) |
|
Змінено імена елементів системного переліку |
Линия (Line) |
СлабоеВыделение (WeakSeparation) |
|
Отступ (Margin) |
ОбычноеВыделение (NormalSeparation) |
|
|
РамкаГруппы (GroupBox) |
СильноеВыделение (StrongSeparation) |
|
|
Перейменовано методи отримання та встановлення заголовка вікна клієнтського застосунку. |
ПолучитьЗаголовокПриложения (GetapplicationCaption) |
ПолучитьЗаголовокКлиентскогоПриложения (GetClientapplicationCaption), |
|
УстановитьЗаголовокПриложения (SetapplicationCaprion) |
УстановитьЗаголовокКлиентскогоПриложения (SetClientapplicationCaption) |
Доопрацювання механізмів роботи з відборами, умовним оформленням, групуваннями та порядком у динамічних списках
У "1С:Предприятии 8.3" для роботи з відборами, умовним оформленням, групуваннями та порядком у динамічних списках використовуються механізми системи компонування даних. Докладніше — див. розділ «Система компонування даних» у документації до платформи.
Відбори й елементи умовного оформлення, що встановлюються в конфігураторі в редакторі налаштувань динамічного списку (далі — «у конфігураторі»), розміщуються в колекції КомпоновщикНастроек.Настройки, а ті, що встановлюються програмно через властивості ".Отбор" і ".УсловноеОформление", — у колекції КомпоновщикНастроек.ФиксированныеНастройки. Таким чином:
- ДинамическийСписок.Отбор відповідає властивості ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.
- ДинамическийСписок.УсловноеОформление відповідає властивості ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.УсловноеОформление.
Наприклад, схема роботи властивості ДинамическийСписок.Отбор і налаштувань, що виконуються в конфігураторі:

При цьому, якщо відбір за одним і тим самим полем одночасно присутній у колекціях Настройки.Отбор і ФиксированныеНастройки.Отбор, виникає помилка часу виконання «Неможливо застосувати фіксовані налаштування. Перетинаються елементи відбору».
На відміну від відборів і умовного оформлення, властивість Порядок відповідає властивості КомпоновщикНастроек.Настройки.Порядок. Коли порядок виводиться в користувацькі налаштування (у конфігураторі увімкнено прапорець «Включать в пользовательские настройки»), тоді Порядок використовується лише як значення «за замовчуванням» (тобто зміни не застосуються, доки користувач не натисне «Все действия» — «Установить стандартные настройки»). Це слід враховувати під час програмної роботи з порядком.
На відміну від інших, властивість Группировка не пов'язана безпосередньо з новими колекціями, проте має аналоги: КомпоновщикНастроек.ФиксированныеНастройки.Структура і КомпоновщикНастроек.Настройки.Структура. Групування, програмно додані через властивість Группировка , вимикаються, якщо користувач переналаштував склад групувань або якщо заповнено властивість КомпоновщикНастроек.Настройки.Структура.
Для переходу на версію 8.3 необхідно знайти всі місця встановлення відборів, умовного оформлення, групувань і порядку в динамічних списках, які виконуються програмно з коду та в конфігураторі за допомогою редактора форми (див. Настройка списка у властивостях динамічного списку).
У більшості випадків, якщо це попередньо встановлені налаштування, які користувач не повинен бачити й змінювати, тоді:
- Для відборів, умовного оформлення та групувань слід перенести створення налаштувань і роботу з ними в програмний код і використовувати властивості динамічного списку Отбор, УсловноеОформление і Группировка.
- Для порядку слід виключити всю колекцію зі складу користувацьких налаштувань у конфігураторі (знявши прапорець Включать в пользовательские настройки) або програмно (установивши порожній рядок у властивості Порядок.ИдентификаторПользовательскойНастройки).
У тих випадках, коли необхідно задати налаштування динамічного списку за замовчуванням, які користувачі зможуть змінювати під час своєї роботи за допомогою команди Все действия - Настроить список (або в передбаченій групі елементів форми для редагування користувацьких налаштувань):
- Для відборів, умовного оформлення та групувань, що встановлювалися програмно, слід використовувати відповідні властивості колекції КомпоновщикНастроек.Настройки.
- Для порядку та налаштувань у конфігураторі нічого робити не потрібно.
У тих випадках, коли для налаштування динамічного списку раніше були передбачені власні елементи керування на формі (наприклад, поля зі швидкими відборами над списком, команди для швидкої зміни групування тощо), слід вибрати один із двох варіантів:
- Щоб задіяти нові можливості платформи, перенести створення налаштувань у конфігуратор (див. Настройка списка у властивостях динамічного списку) і задати властивість Группа пользовательских настроек таблиці форми, пов'язаної з цим динамічним списком.
- Для збереження поточної поведінки перенести створення налаштувань у програмний код і використовувати властивості динамічного списку Отбор і УсловноеОформление. А для збереження поточної поведінки з групуваннями та порядком слід:
- Якщо користувачі повинні мати можливість переналаштовувати групування та порядок за допомогою команди Все действия - Настроить список, тоді під час програмної роботи слід використовувати властивість КомпоновщикНастроек.ПользовательскиеНастройки
- В іншому разі зняти прапорець Включать в пользовательские настройки у властивостях групувань динамічного списку в конфігураторі та працювати в коді з властивостями Группировка і Порядок.
Запит із ключовим словом ИТОГИ ПО ОБЩИЕ і вивантажений у режимі ОбходРезультатаЗапроса.ПоГруппировкам
Запит, у якому зазначено ключове слово ИТОГИ ПО ОБЩИЕ і вивантажений у режимі ОбходРезультатаЗапроса.ПоГруппировкам у "1С:Предприятии 8.3" повертає результат, що відрізняється від версії 8.2. Вузли групувань у версії 8.2 розташовувалися на одному рівні із загальним підсумком, у версії 8.3 вони будуть вкладені в загальний підсумок, який розташовується в корені дерева значень.
Для переходу на версію 8.3 необхідно:
- виявити всі запити з ИТОГИ ПО ОБЩИЕ і вивантажувані в режимі ОбходРезультатаЗапроса.ПоГруппировкам;
- переглянути обробку дерева значень, перенісши обхід рядків із групуваннями всередину обходу рядка із загальним підсумком.
Приклад запиту та вивантаження результату, що потребуватимуть перегляду:
Запрос = Новый Запрос(" |ВЫБРАТЬ | … КАК Отвечал, | … КАК Респондент, | … |ИЗ | … | |ИТОГИ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Респондент) |ПО | ОБЩИЕ, | Отвечал"); ДеревоРезультата = Запрос.Выполнить.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
Зміни імен класів COM-об'єктів
У "1С:Предприятии 8.3" змінено ім'я класу COM-об'єктів — для COM-з'єднувача замість "V82.COMConnector" використовується "V83.COMConnector", а замість "V82.application" використовується "V83.application".
Для усунення несумісності необхідно замінити всі входження старих імен на нові.
Відмова від події НачалоВыбораИзСписка для полів введення в режимі вибору зі списку
У "1С:Предприятии 8.3" у поля введення не викликається НачалоВыбораИзСписка. Це пов'язано з появою нової властивості поля введення КнопкаВыпадающегоСписка, яка дає змогу за кнопкою виводити розкривний список, що формується автоматично. Докладніше див. документацію до платформи.
Для усунення несумісності необхідно знайти поля введення з обробником НачалоВыбораИзСписка і перенести його код в інші обробники згідно з критеріями:
- Код із додавання елементів до списку вибору слід розмістити в обробнику форми ПриСозданииНаСервере. Крім того, якщо склад списку вибору залежить від значень інших полів, код зі зміни елементів списку вибору слід викликати в обробниках зміни відповідних полів, наприклад за допомогою обробників ПриИзменении.
- Реалізацію коду, не пов'язаного із заповненням списку вибору, необхідно переглянути з використанням тих засобів, які надає платформа «1С:Предприятие» версії 8.3.3.
Відмова від властивості КнопкаСпискаВыбора для полів введення
У "1С:Предприятии 8.3" у поля введення відсутня властивість КнопкаСпискаВыбора. Замість неї тепер слід використовувати нову властивість КнопкаВыпадающегоСписка. Докладніше див. документацію до платформи.
Для усунення несумісності необхідно за допомогою доданого звіту знайти поля введення, у яких у властивості КнопкаСпискаВыбора було встановлено значення «Да» і явно встановити у властивості КнопкаВыпадающегоСписка значення «Да» у разі, якщо кнопка розкривного списку не виводиться за значення «Авто».
Підтримка Linux-клієнта
Якщо планується підтримати працездатність конфігурації на Linux-клієнті, необхідно виявити механізми, які не працюють у Linux-клієнті (згідно з описом нижче). Щодо кожного з них ухвалити рішення, чи є він ключовим для прикладного рішення або другорядним (допоміжним, обслуговчим).
Потім на першому етапі:
- коректно вимкнути в Linux-клієнті другорядні механізми,
- а для ключових механізмів — задіяти можливості платформи 8.3 для уніфікації роботи під ОС Linux і Windows.
На другому етапі задіяти можливості платформи 8.3 для уніфікації роботи під ОС Linux і Windows також для другорядних механізмів, раніше вимкнених на першому етапі.
Приховати або вимкнути механізми в Linux-клієнті, які не розраховані на роботу в ОС Linux
Виявити механізми, які не працюють у Linux-клієнті згідно зі списком обмежень клієнтського застосунку, що працює під ОС Linux:
- Не підтримується технологія COM і весь перелік можливостей, пов'язаних із цією технологією:
- Не підтримується робота з об'єктом COMОбъект;
- Запуск клієнта «1С:Предприятия» у режимі automation-сервера;
- Зовнішні компоненти, створені з використанням COM-технології.
- Не підтримується робота з об'єктом Почта.
- Не підтримується механізм постачання конфігурації.
- Не підтримується використання метафайлів Windows (WMF і EMF).
Далі або приховати команди цих механізмів із командного інтерфейсу, або (якщо приховати неможливо) виводити повідомлення виду «< Операция> недоступна при работе в Linux».
Наприклад:
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Информация = Новый СистемнаяИнформация; Если Информация.ТипПлатформы = ТипПлатформы.Linux_x86 Или Информация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда ПоказатьПредупреждение(, НСтр("ru = 'Печать в Microsoft Word недоступна при работе в Linux'")); Возврат; КонецЕсли; <...> КонецПроцедуры
Елемент керування ПолеHTMLДокумента та поле форми типу Поле HTML документа
Зовнішній вигляд ПоляHTMLДокумента може відрізнятися залежно від ОС, у якій запущено клієнтський застосунок. Це пов'язано з тим, що в Linux виведення реалізовано на основі бібліотеки WebKit замість Internet Explorer.
Слід врахувати, що зовнішній вигляд і об'єктна модель HTML-документа (DOM-модель), доступ до якого здійснюється за допомогою властивості ПолеHTMLДокумента.Документ, можуть відрізнятися від таких під час роботи в клієнтському застосунку, що працює під ОС Windows.
- Задіяти лише стандартні елементи DOM-моделі, доступні в усіх варіантах роботи.
- Під час підготовки HTML-вмісту орієнтуватися на стандарти — не слід використовувати специфічні для конкретного браузера методи та властивості.
Задіяти можливості платформи "1С:Предприятие 8.3" для уніфікації роботи під ОС Linux і Windows
Аналоги COM-технології
У низці випадків використання COM-технологій можна перевести на механізми «1С:Предприятия 8.3»:
- Для адміністрування кластера серверів «1С:Предприятия» слід використовувати сервер адміністрування (ras) і утиліту адміністрування (rac).
- Для отримання шляхів до робочих каталогів слід використовувати методи глобального контексту РабочийКаталогДанныхПользователя(), КаталогДокументов(), КаталогВременныхФайлов().
В інших випадках слід розглянути альтернативи COM-технології, що працюють в ОС Linux, наприклад — технологію створення зовнішніх компонентів Native aPI.
Докладніше — див. розділ «Зовнішні компоненти» у документації до платформи.
Аналоги об'єкта Почта
Розглянути альтернативні варіанти
- Щодо переведення механізмів, які працювали з об'єктом Почта, на об'єкт ИнтернетПочта;
- Щодо розробки зовнішніх компонентів для Linux, що працюють із установленими поштовими клієнтами в Linux
Аналог метафайлів Windows
Замінити картинки у форматі WMF та EMF, включені до складу конфігурації, на растрові, наприклад PNG або JPG.
Відмова від усіх модальних вікон
На платформі «1С:Предприятие» 8.3 з'явилася можливість повністю відмовитися від модальних методів, замінивши їх блокувальними, що дасть змогу покращити чуйність інтерфейсу та підвищити зручність роботи в закладковому режимі.
Ця процедура є обов'язковою після встановлення властивості конфігурації "Режим использования модальности" у "Не использовать".
Слід знайти всі виклики модальних методів і згідно з таблицею 2 замінити їх немодальними методами з блокуванням вікна власника або всього інтерфейсу.
Таблиця 2 — Модальні та немодальні методи у версії 8.3
|
Модальний метод |
Немодальний метод |
|---|---|
|
Глобальний контекст |
|
|
Вопрос |
ПоказатьВопрос |
|
Предупреждение |
ПоказатьПредупреждение |
|
ОткрытьЗначение |
ПоказатьЗначение |
|
ВвестиДату |
ПоказатьВводДаты |
|
ВвестиЗначение |
ПоказатьВводЗначения |
|
ВвестиСтроку |
ПоказатьВводСтроки |
|
ВвестиЧисло |
ПоказатьВводЧисла |
|
УстановитьВнешнююКомпоненту |
НачатьУстановкуВнешнейКомпоненты |
|
УстановитьРасширениеРаботыСФайлами |
НачатьУстановкуРасширенияРаботыСФайлами |
|
УстановитьРасширениеРаботыСКриптографией |
НачатьУстановкуРасширенияРаботыСКриптографией |
|
ПоместитьФайл |
НачатьПомещениеФайла |
|
ОткрытьФормуМодально |
ОткрытьФорму |
|
ДиалогРедактированияСтандартногоПериода |
|
|
Редактировать |
Показать |
|
КонструкторФорматнойСтроки |
|
|
ОткрытьМодально |
Показать |
|
ДиалогРасписанияРегламентногоЗадания |
|
|
ОткрытьМодально |
Показать |
|
ДиалогВыбораШрифта |
|
|
Выбрать |
Показать |
|
ДиалогВыбораЦвета |
|
|
Выбрать |
Показать |
|
ОбработкаРасшифровкиКомпоновкиДанных |
|
|
ВыбратьДействие |
ПоказатьВыборДействия |
|
СписокЗначений |
|
|
ОтметитьЭлементы |
ПоказатьОтметкуЭлементов |
|
ВыбратьЭлемент |
ПоказатьВыборЭлемента |
|
УправляемаяФорма |
|
|
ВыбратьИзМеню |
ПоказатьВыборИзМеню |
|
ВыбратьИзСписка |
ПоказатьВыборИзСписка |
|
ОткрытьМодально |
Открыть |
Параметри нових немодальних методів відповідають параметрам модальних методів, за одним винятком:
- До складу параметрів включено параметр ОписаниеОповещенияОЗавершении, що вказує, куди повертати результат вибору.
Далі розглянемо на прикладах основні прийоми, які можна використовувати для переходу до немодальних методів.
Приклад переведення методу глобального контексту ОткрытьФормуМодально на ОткрытьФорму
Необхідно виявити всі випадки використання методу глобального контексту ОткрытьФормуМодально. Потім виконати заміну модального методу на аналогічний йому немодальний метод ОткрытьФорму. Для цього необхідно:
- Установити в форми, що відкривається, властивість РежимОткрытияОкна у значення Блокировать окно владельца або Блокировать весь интерфейс.
- Якщо форма передбачає кілька сценаріїв відкриття — і як блокувальна, і як незалежна, то властивість форми РежимОткрытияОкна необхідно встановлювати в Независимый, і передавати режим відкриття в параметрах методів ОткрытьФорму і Открыть.
- Якщо форма, що відкривається, повертає результат у форму, що викликає, тоді потрібно:
- Передавати об'єкт ОписаниеОповещения у параметрах методів ОткрытьФорму і Открыть.
- логічно розділити алгоритм роботи з формою на дві частини: «Підготовка до відкриття форми» та «Обробка результату роботи форми». Приклад розділення алгоритму:
У формі-власнику (було):
&НаКлиенте Процедура ДобавитьХарактеристику(Команда) // Вибір виду характеристики ВидХарактеристики = ОткрытьФормуМодально("ПланВидовХарактеристик.ФормаВыбора"); Если ВидХарактеристики = Неопределено Тогда Возврат; КонецЕсли; // Обробка результату вибору // ... КонецПроцедуры
У формі-власнику (стало):
&НаКлиенте Процедура ДобавитьХарактеристику(Команда) // Вибір виду характеристики Обработчик = Новый ОписаниеОповещения("ДобавитьХарактеристикуЗавершение", ЭтотОбъект); Режим = РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс; ОткрытьФорму("ПланВидовХарактеристик.ВидыХарактеристик.ФормаВыбора",,,,,, Обработчик, Режим); КонецПроцедуры &НаКлиенте Процедура ДобавитьХарактеристикуЗавершение(ВидХарактеристики, Параметры) Экспорт Если ВидХарактеристики = Неопределено Тогда Возврат; КонецЕсли; // Обробка результату вибору // ... КонецПроцедуры
Виняток становлять рідкісні випадки, коли виконання коду має бути призупинено до моменту отримання результату роботи форми та коли алгоритм логічно не можна розділити на дві частини «Підготовка до відкриття форми» та «Обробка результату роботи форми»:
- Коли форма відкривається модально в обробниках глобального контексту — під час запуску або завершення роботи з програмою.
- Коли діалог відкривається в обробниках подій елементів форми, при цьому СтандартнаяОбработка залишається Истина.
- В інших випадках, коли відкрита модальна форма повертає результат, а форми, що викликає, не передбачено.
У таких випадках рекомендується повністю перепроєктувати взаємодію з користувачем.
Приклад переведення питання в обробниках ПередЗакрытием
Необхідно виявити всі випадки використання модальних методів в обробнику ПередЗакрытием керованих форм. Потім виконати заміну модального методу на аналогічний йому немодальний метод, розділивши код на дві частини: «До відкриття діалогу» та «Обробка результату редагування». Додатково в коді «До відкриття діалогу» слід установлювати Отказ = Истина, а в коді «Обробка результату редагування» продовжувати закриття форми.
Приклад розділення алгоритму:
Було:
&НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) Если Модифицированность Тогда Ответ = Вопрос(НСтр("ru = 'Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); Если Ответ = КодВозвратаДиалога.Да Тогда СохранитьИзменения(); // Збереження змін і скидання прапорця Модифицированность. ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда Отказ = Истина; КонецЕсли; КонецЕсли; КонецПроцедуры
Стало:
&НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) Если Модифицированность Тогда Отказ = Истина; ОписаниеОповещения = Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект); ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПередЗакрытиемЗавершение(Результат, ДополнительныеПараметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда СохранитьИзменения(); Закрыть(); ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда Модифицированность = Ложь; Закрыть(); КонецЕсли; КонецПроцедуры
Приклад переведення методу ОткрытьМодально об'єкта ДиалогРасписанияРегламентногоЗадания на Показать
Необхідно виявити всі випадки використання методу ОткрытьМодально об'єкта ДиалогРасписанияРегламентногоЗадания. Потім виконати заміну модального методу на аналогічний йому немодальний метод Показать, розділивши код на дві частини: «До відкриття діалогу» та «Обробка результату редагування».
Приклад розділення алгоритму:
У керованій формі (було):
&НаКлиенте Процедура ПредставлениеРасписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Если РегламентныеЗаданияКлиент.ИзменитьРасписание(Расписание) Тогда ЭтаФорма.Модифицированность = Истина; ПредставлениеРасписание = Строка(Расписание); КонецЕсли; КонецПроцедуры
У керованій формі (стало):
&НаКлиенте Процедура ПредставлениеРасписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДополнительныеПараметры = Новый Структура("Модифицированность", Истина); ОписаниеОповещения = Новый ОписаниеОповещения("ИзменитьРасписаниеЗавершение", ЭтотОбъект, ДополнительныеПараметры); РегламентныеЗаданияКлиент.ИзменитьРасписание(ОписаниеОповещения, Расписание); КонецПроцедуры &НаКлиенте Процедура ИзменитьРасписаниеЗавершение(Результат, ДополнительныеПараметры) Экспорт Если ТипЗнч(Результат) = Тип("РасписаниеРегламентногоЗадания") Тогда Расписание = Результат; ПредставлениеРасписание = Строка(Расписание); ДополнительныеПараметры.Свойство("Модифицированность", Модифицированность) КонецЕсли; КонецПроцедуры
У загальному модулі (було):
Функция ИзменитьРасписание(Расписание) Экспорт ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); Если ДиалогРасписания.ОткрытьМодально() Тогда Расписание = ДиалогРасписания.Расписание; Возврат Истина; КонецЕсли; Возврат Ложь; КонецФункции
У загальному модулі (стало):
Процедура ИзменитьРасписание(ОписаниеОповещения, Расписание) Экспорт ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); ДиалогРасписания.Показать(ОписаниеОповещения); КонецПроцедуры
Додаткові відомості щодо роботи з об'єктом ОписаниеОповещения
Об'єкт ОписаниеОповещения слід використовувати для опису клієнтської процедури, яку потрібно викликати після отримання результату для подальшої обробки, наприклад, після вибору в немодальному діалозі.
При цьому не слід використовувати інші можливості платформи, які можуть бути схожі на методику роботи з об'єктом ОписаниеОповещения, але призначені для вирішення інших завдань:
- Метод Оповестить і обробник події ОбработкаОповещения. Їх потрібно використовувати лише для широкомовного розсилання повідомлення всім відкритим формам.
- Метод ОповеститьОВыборе і обробник події ОбработкаВыбора. Їх потрібно використовувати лише для вибору значень стосовно полів введення та таблиць.
У тих випадках, коли необхідно передавати параметри роботи коду «до виклику сповіщення» в код обробника сповіщення, рекомендується використовувати властивість ДополнительныеПараметры об'єкта ОписаниеОповещения.
Докладніше — див. документацію до платформи.