1С:Предприятие 8.2 /
Разработчикам /
Платформа, механизмы и технологии
Перевод конфигураций на платформе "1С:Предприятие 8.2" на платформу "1С:Предприятие 8.3" без режима совместимости с версией 8.2
Изменение свойств фиксированной структуры
Помещение во временное хранилище несериализуемых значений
Пересмотр работы с предопределенными элементами в РИБ
Переименования методов и свойств
Запрос с ключевым словом ИТОГИ ПО ОБЩИЕ и выгруженный в режиме ОбходРезультатаЗапроса.ПоГруппировкам
Изменения имен классов 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 = 'Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПередЗакрытиемЗавершение(Результат, ДополнительныеПараметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда СохранитьИзменения(); Закрыть(); ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда Модифицированность = Ложь; Закрыть(); КонецЕсли; КонецПроцедуры
Пример перевода метода ОткрытьМодально объекта ДиалогРасписанияРегламентногоЗадания на Показать
Необходимо выявить все случаи использования метода ОткрытьМодально объекта ДиалогРасписанияРегламентногоЗадания. Затем выполнить замену модального метода на аналогичный ему немодальный метод Показать, разделив код на две части: "До открытия диалога" и "Обработка результата редактирования".
Пример разделения алгоритма:
В управляемой форме (было):
&НаКлиенте Процедура ПредставлениеРасписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Если РегламентныеЗаданияКлиент.ИзменитьРасписание(Расписание) Тогда ЭтаФорма.Модифицированность = Истина; ПредставлениеРасписание = Строка(Расписание); КонецЕсли; КонецПроцедуры
В управляемой форме (стало):
&НаКлиенте Процедура ПредставлениеРасписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДополнительныеПараметры = Новый Структура("Модифицированность", Истина); ОписаниеОповещения = Новый ОписаниеОповещения("ИзменитьРасписаниеЗавершение", ЭтотОбъект, ДополнительныеПараметры); РегламентныеЗаданияКлиент.ИзменитьРасписание(ОписаниеОповещения, Расписание); КонецПроцедуры &НаКлиенте Процедура ИзменитьРасписаниеЗавершение(Результат, ДополнительныеПараметры) Экспорт Если ТипЗнч(Результат) = Тип("РасписаниеРегламентногоЗадания") Тогда Расписание = Результат; ПредставлениеРасписание = Строка(Расписание); ДополнительныеПараметры.Свойство("Модифицированность", Модифицированность) КонецЕсли; КонецПроцедуры
В общем модуле (было):
Функция ИзменитьРасписание(Расписание) Экспорт ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); Если ДиалогРасписания.ОткрытьМодально() Тогда Расписание = ДиалогРасписания.Расписание; Возврат Истина; КонецЕсли; Возврат Ложь; КонецФункции
В общем модуле (стало):
Процедура ИзменитьРасписание(ОписаниеОповещения, Расписание) Экспорт ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); ДиалогРасписания.Показать(ОписаниеОповещения); КонецПроцедуры
Дополнительные сведения по работе с объектом ОписаниеОповещения
Объект ОписаниеОповещения следует использовать для описания клиентской процедуры, которую следует вызвать после получения результата для дальнейшей обработки, например, после выбора в немодальном диалоге.
При этом не следует использовать другие возможности платформы, которые могут быть похожи на методику работы с объектом ОписаниеОповещения, но предназначены для решения других задач:
- Метод Оповестить и обработчик события ОбработкаОповещения. Их нужно использовать только для широковещательной рассылки сообщения всем открытым формам.
- Метод ОповеститьОВыборе и обработчик события ОбработкаВыбора. Их нужно использовать только для выбора значений применительно к полям ввода и таблицам.
В тех случаях когда необходимо передавать параметры работы кода "до вызова оповещения" в код обработчика оповещения рекомендуется использовать свойство ДополнительныеПараметры объекта ОписаниеОповещения.
Подробнее – см. документацию по платформе.
Новости и события
Тренинг-семинар «Как получить работу бухгалтера»
Курсы бухгалтеров с трудоустройством
Курсы программирования 1С:Предприятие 8.2
Другие материалы по теме:
разработка конфигураций, в конфигураторе, расписание, конецпроцедуры, свойства, буфер обмена, копировать, отбор, обмен, формы, списание, объект, элемент, настройки, изменения, результат, предприятие, работы, конфигурации, документ
Материалы из раздела: 1С:Предприятие 8.2 / Разработчикам / Платформа, механизмы и технологии
Другие материалы по теме:
Общесистемные механизмы и принципы
Нас находят: режимы совместимости 1С 8 3, поле объекта недоступно для записи рабочая дата, переданное значение не может быть помещено во временное хранилище 1с, поле объекта недоступно для записи рабочая дата 1с 8 3, перейти на платформу 8/3 с помощью конфигуратора, Переданное значение не может быть помещено во временное хранилище, режим совместимости 1с 8 3, поле объекта недоступно для записи рабочая дата 1с 8 3 закрытие месяца, 1с предприятие 8 3 режим совместимости с 8 2, 1
Мы на Facebook