Расширение формы клиентского приложения для отчета.АвтоОтображениеСостояния

Свойства · AutoShowState

Тип: РежимАвтоОтображенияСостояния. Содержит режим отображения состояния отчета. Значение Авто эквивалентно значению Отображать. По умолчанию данное свойство имеет значение Авто.

Полное описание, параметры и ограничения

Расширение формы клиентского приложения для отчета.АвтоОтображениеСостояния (Client application form extension for reports.AutoShowState)

Расширение формы клиентского приложения для отчета (Client application form extension for reports)

АвтоОтображениеСостояния (AutoShowState)

Доступен, начиная с версии 8.2.

Использование:
Чтение и запись.
Описание:
Тип: РежимАвтоОтображенияСостояния.
Содержит режим отображения состояния отчета.
Значение Авто эквивалентно значению Отображать. По умолчанию данное свойство имеет значение Авто.
Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.2.

Методическая информация

Практические примеры

Изменить режим штатного состояния формирования и вернуть исходное свойство

АвтоОтображениеСостояния управляет штатным состоянием собственного отчёта. Три явных режима проверяются вместе с настоящими событиями компоновки, затем возвращается actual исходное значение. Появление индикатора и числовой результат отдельно проверяются вручную; быстрый отчёт может не дать заметного индикатора.

Где и как запускать

Полный модуль Отчёты → УчебныеТемпературы85 → Формы → УчебноеСостояние85 → Модуль формы. Все процедуры на уровне модуля; директивы уже включены. Только толстый управляемый desktop-клиент 8.5.1.1343, Такси; runtime не проверен.

Подготовка

  1. Здесь фактический запуск 1С не выполнен. Статические/native проверки не компилируют и не запускают 1С, не доказывают появление индикатора, hover, окно или числовой состав сформированного отчёта.

  2. Создайте новую отдельную пустую учебную базу платформы 8.5.1.1343. Имя конфигурации УчебныеВзаимодействияОтчета85; основной режим запуска УправляемоеПриложение; режим совместимости НеИспользовать; РежимСовместимостиИнтерфейса=Такси. Не используйте рабочую конфигурацию.

  3. Создайте отдельного нового учебного пользователя только собственной новой базы. Запускайте именно толстый клиент в режиме управляемого приложения и интерфейсе Такси. Тонкий/web/мобильный стенд здесь не заявлен; не меняйте режим рабочего сеанса.

  4. В этой своей новой конфигурации создайте учебную роль УчебныйДоступТемператур85 с доступом к собственному отчёту УчебныеТемпературы85, подготовленным общим формам и общим командам запуска. Назначьте её только отдельному новому учебному пользователю; роли и права рабочего пользователя не меняйте.

  5. У собственной учебной роли отдельно разрешите глобальное право ТолстыйКлиент — запуск толстого клиента, и РежимОсновногоОкнаОбычный — запуск с обычным основным окном. Новый учебный сеанс использует обычный режим основного окна. Это НЕ ОбычноеПриложение: режим приложения остаётся управляемым, интерфейс Такси. Если запуск или основное окно запрещены правами, сначала проверьте права именно этого нового учебного пользователя; доступ к отчёту сам по себе не разрешает запуск приложения. Административные и чужие роли не копируйте.

  6. В дереве конфигурации Отчёты создайте УчебныеТемпературы85. Прикладные реквизиты, справочники, документы, регистры и записи не требуются. Модуль объекта отчёта оставьте пустым: новые события ПриКомпоновкеРезультата/ПослеКомпоновкиРезультата назначаются ФОРМЕ, не объекту.

  7. Полный отдельный серверный модуль УчебныеВзаимодействияОтчета85 вставьте в Общие → Общие модули → УчебныеВзаимодействияОтчета85 → Модуль. Включите Сервер; выключите Клиент, Глобальный и Вызов сервера. Функция вызывается только из серверных обработчиков собственных отчётных форм.

  8. Схема создаётся полностью программно; файловый макет не нужен. Source УчебныйИсточникТемператур имеет ТипИсточникаДанных Local. Dataset УчебныеТемпературы выполняет приложенный запрос трёх собственных константных записей Утро/18, День/23, Вечер/19, без чтения прикладных данных.

  9. Выбраны ровно два поля Период и Температура. В структуре одна используемая группировка без полей группировки — детальные записи с АвтоВыбраннымПолем. Ресурсы, итоги, параметры, пользовательские варианты и фиктивные auto-имена не создаются.

  10. В каждой собственной отчётной форме создайте дополнительные реквизиты СостояниеУрока типа Строка неограниченной длины, СобытийДо и СобытийПосле типа Число длиной 6/точность 0/неотрицательный, КомпоновкаЗавершена типа Булево. Поля с путями к этим реквизитам сделайте ТолькоПросмотр=Истина.

  11. В свойствах событий каждой ФОРМЫ назначьте ПриСозданииНаСервере → ПриСозданииНаСервере, ПриКомпоновкеРезультата → ПриКомпоновкеРезультата, ПослеКомпоновкиРезультата → ПослеКомпоновкиРезультата. Сигнатуры уже в полном модуле. Старое трёхпараметрическое событие объекта отчёта не используйте.

  12. КомпоновкаЗавершена означает только получение параметра события типа ТабличныйДокумент; счётчики — только наблюдение вызовов. Это НЕ сверка чисел отчёта. Периоды и температуры прочитайте вручную из actual результата; значения не подменяются вычислениями или ожидаемым массивом.

  13. Все четыре собственные формы при создании до открытия назначают РежимБлокировкиПриОткрытииОкна=РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать. Это native значение 8.5.1, доступное управляемому Taxi-стенду; пульт не должен блокироваться отчётным окном. Оно не доказывает визуальную активацию окна.

  14. АвтоматическоеСохранениеДанныхВНастройках собственных форм оставьте НеИспользовать. Не выполняйте команды сохранения вариантов, профилей, настроек, файлов или печати. Новый пользователь/база изолируют внутренние действия платформы, но отсутствие явно вызванного сохранения НЕ доказывает отсутствие системных сохранений/истории.

  15. После подготовки всех своих объектов, форм, модулей и команд в Конфигураторе выполните Конфигурация → Обновить конфигурацию базы данных (F7). Если получены ошибки собственной учебной конфигурации, исправьте их до запуска. Закройте старый учебный сеанс, заново откройте именно эту новую базу своим учебным пользователем в толстом управляемом клиенте Такси; не обновляйте рабочую базу.

  16. В Отчёты → УчебныеТемпературы85 → Формы создайте управляемую форму отчёта УчебноеСостояние85 (Основная), не общую форму. Основной реквизит Отчет: ОтчетОбъект.УчебныеТемпературы85, признак Основной. Реквизит Результат: ТабличныйДокумент; собственное поле ПолеРезультата: поле табличного документа, ПутьКДанным=Результат. Проверяйте эти реальные имена, не угадывайте имена конструктора.

  17. Полный модуль УчебноеСостояние85 вставьте целиком в Отчёты → УчебныеТемпературы85 → Формы → УчебноеСостояние85 → Модуль формы. Заменяйте только исходный модуль этой своей новой учебной формы. Стандартную команду Сформировать оставьте доступной, команды сохранения/печати в опыте не используйте.

  18. Создайте реквизит ИсходноеАвтоОтображение типа РежимАвтоОтображенияСостояния (native допускает реквизиты управляемой формы), МаршрутРежимаПодтвержден и РежимВосстановлен типа Булево; их собственные поля сделайте ТолькоПросмотр=Истина.

  19. Создайте команды и кнопки БезСостояния, СоСостоянием, ТолькоПриФормировании, ВосстановитьСостояние. Каждой назначьте одноимённый клиентский обработчик полного модуля. Отдельной команды СформироватьУчебныйОтчет в этой форме нет: каждая режимная команда формирует через общий используемый обработчик.

  20. Снимок ИсходноеАвтоОтображение получает реальное исходное свойство при создании своего экземпляра; не заменяйте его предположением Авто и не перезаписывайте между кнопками.

  21. Полный отдельный модуль запуска ОткрытьУчебноеСостояние85 вставьте в Общие → Общие команды → ОткрытьУчебноеСостояние85 → Модуль команды. Команду без параметра включите в командный интерфейс нового учебного приложения. Новый UUID ключа уникальности каждого запуска не должен случайно переиспользовать предыдущий экземпляр.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() <> ВариантИнтерфейсаКлиентскогоПриложения.Такси Тогда
    Отказ = Истина;
    ВызватьИсключение "Подготовьте собственный учебный сеанс Такси";
КонецЕсли;
ЭтаФорма.РежимБлокировкиПриОткрытииОкна = РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать;
Если ЭтаФорма.ТипФормыОтчета <> ТипФормыОтчета.Основная Тогда
    Отказ = Истина;
    ВызватьИсключение "Нужна управляемая форма собственного отчёта Основная";
КонецЕсли;
ОбъектОтчета = ЭтаФорма.РеквизитФормыВЗначение("Отчет");
Схема = УчебныеВзаимодействияОтчета85.СоздатьСхемуТемператур();
ОбъектОтчета.СхемаКомпоновкиДанных = Схема;
ОбъектОтчета.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
ОбъектОтчета.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
ЭтаФорма.ЗначениеВРеквизитФормы(ОбъектОтчета, "Отчет");
ЭтаФорма.СобытийДо = 0;
ЭтаФорма.СобытийПосле = 0;
ЭтаФорма.КомпоновкаЗавершена = Ложь;
ЭтаФорма.СостояниеУрока = "Собственная схема готова; взаимодействие и числа ещё не проверены";
ЭтаФорма.ИсходноеАвтоОтображение = ЭтаФорма.АвтоОтображениеСостояния;
ЭтаФорма.МаршрутРежимаПодтвержден = Ложь;
ЭтаФорма.РежимВосстановлен = Ложь;
КонецПроцедуры

&НаСервере
Процедура ПриКомпоновкеРезультата(СтандартнаяОбработка)
СтандартнаяОбработка = Истина;
ЭтаФорма.КомпоновкаЗавершена = Ложь;
ЭтаФорма.СобытийДо = ЭтаФорма.СобытийДо + 1;
КонецПроцедуры

&НаСервере
Процедура ПослеКомпоновкиРезультата(Результат, СтандартнаяОбработка)
СтандартнаяОбработка = Истина;
ЭтаФорма.КомпоновкаЗавершена = Ложь;
ЭтаФорма.СобытийПосле = ЭтаФорма.СобытийПосле + 1;
Если ТипЗнч(Результат) <> Тип("ТабличныйДокумент") Тогда
    ЭтаФорма.СостояниеУрока = "Событие не передало ТабличныйДокумент; взаимодействие остановлено";
    Возврат;
КонецЕсли;
ЭтаФорма.КомпоновкаЗавершена = Истина;
ЭтаФорма.СостояниеУрока = "Событие передало фактический ТабличныйДокумент. Это не сверка чисел отчёта";
КонецПроцедуры

&НаКлиенте
Процедура БезСостояния(Команда)
СформироватьВСвоемРежиме(РежимАвтоОтображенияСостояния.НеОтображать);
КонецПроцедуры

&НаКлиенте
Процедура СоСостоянием(Команда)
СформироватьВСвоемРежиме(РежимАвтоОтображенияСостояния.Отображать);
КонецПроцедуры

&НаКлиенте
Процедура ТолькоПриФормировании(Команда)
СформироватьВСвоемРежиме(РежимАвтоОтображенияСостояния.ОтображатьПриФормировании);
КонецПроцедуры

&НаКлиенте
Процедура СформироватьВСвоемРежиме(ЗапрошенныйРежим)
ЭтаФорма.МаршрутРежимаПодтвержден = Ложь;
ЭтаФорма.РежимВосстановлен = Ложь;
До = ЭтаФорма.СобытийДо;
После = ЭтаФорма.СобытийПосле;
Попытка
    ЭтаФорма.АвтоОтображениеСостояния = ЗапрошенныйРежим;
    Если ЭтаФорма.АвтоОтображениеСостояния <> ЗапрошенныйРежим Тогда
        ВызватьИсключение "Свойство не совпало с явно запрошенным режимом";
    КонецЕсли;
    ЭтаФорма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Непосредственно);
    Если ЭтаФорма.СобытийДо <> До + 1 Или ЭтаФорма.СобытийПосле <> После + 1 Или Не ЭтаФорма.КомпоновкаЗавершена Тогда
        ВызватьИсключение "Назначенные события формы не подтвердили формирование";
    КонецЕсли;
    ЭтаФорма.МаршрутРежимаПодтвержден = Истина;
    ЭтаФорма.СостояниеУрока = СтрШаблон("Режим %1 и маршрут событий подтверждены. Появление состояния и температуры проверьте вручную", ЗапрошенныйРежим);
Исключение
    ЭтаФорма.МаршрутРежимаПодтвержден = Ложь;
    ЭтаФорма.СостояниеУрока = "Опыт режима остановлен: " + ОписаниеОшибки();
    Попытка
        ЭтаФорма.АвтоОтображениеСостояния = ЭтаФорма.ИсходноеАвтоОтображение;
        ЭтаФорма.СостояниеУрока = ЭтаФорма.СостояниеУрока + СтрШаблон(". После попытки восстановления свойство %1", ЭтаФорма.АвтоОтображениеСостояния);
    Исключение
        ЭтаФорма.СостояниеУрока = ЭтаФорма.СостояниеУрока + ". Восстановление не выполнено: " + ОписаниеОшибки();
    КонецПопытки;
КонецПопытки;
Сообщить(ЭтаФорма.СостояниеУрока);
КонецПроцедуры

&НаКлиенте
Процедура ВосстановитьСостояние(Команда)
ЭтаФорма.РежимВосстановлен = Ложь;
ЭтаФорма.МаршрутРежимаПодтвержден = Ложь;
Попытка
    ЭтаФорма.АвтоОтображениеСостояния = ЭтаФорма.ИсходноеАвтоОтображение;
    Если ЭтаФорма.АвтоОтображениеСостояния <> ЭтаФорма.ИсходноеАвтоОтображение Тогда
        ВызватьИсключение "Исходное свойство не восстановилось";
    КонецЕсли;
    ЭтаФорма.РежимВосстановлен = Истина;
    ЭтаФорма.СостояниеУрока = "Восстановлено реальное исходное свойство: " + Строка(ЭтаФорма.АвтоОтображениеСостояния);
Исключение
    ЭтаФорма.РежимВосстановлен = Ложь;
    ЭтаФорма.СостояниеУрока = "Восстановление не подтверждено: " + ОписаниеОшибки();
КонецПопытки;
Сообщить(ЭтаФорма.СостояниеУрока);
КонецПроцедуры
УчебныеВзаимодействияОтчета85

Общие → Общие модули → УчебныеВзаимодействияОтчета85 → Модуль

Полный отдельный серверный общий модуль собственной учебной схемы. Толстый управляемый desktop-стенд 8.5.1.1343, Такси; запуск 1С не выполнен.

Функция СоздатьСхемуТемператур() Экспорт
Схема = Новый СхемаКомпоновкиДанных;
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныйИсточникТемператур";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "УчебныеТемпературы";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
|    ""Утро"" КАК Период,
|    18 КАК Температура
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""День"", 23
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Вечер"", 19";
Настройки = Схема.НастройкиПоУмолчанию;
Для Каждого ИмяПоля Из СтрРазделить("Период,Температура", ",") Цикл
    Выбранное = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    Выбранное.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
    Выбранное.Использование = Истина;
КонецЦикла;
Детали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Детали.Использование = Истина;
АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбор.Использование = Истина;
Возврат Схема;
КонецФункции
ОткрытьУчебноеСостояние85

Общие → Общие команды → ОткрытьУчебноеСостояние85 → Модуль команды

Полный отдельный клиентский модуль общей команды запуска своей подготовленной формы, толстый управляемый desktop-клиент 8.5.1.1343, Такси.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("Отчет.УчебныеТемпературы85.Форма.УчебноеСостояние85", , , "temperature-workshop-" + Строка(Новый УникальныйИдентификатор));
КонецПроцедуры

Разбор по шагам

  1. Запустите ОткрытьУчебноеСостояние85 и запишите фактическое ИсходноеАвтоОтображение. Проверка версии/своей конфигурации/Такси и собственная схема выполняются на сервере.

  2. Нажмите БезСостояния. Клиент назначает НеОтображать, сравнивает actual свойство и запускает штатную компоновку Непосредственно.

  3. Назначенные серверные события формы должны увеличить оба счётчика ровно на один; параметр ПослеКомпоновкиРезультата проверяется только на тип ТабличныйДокумент.

  4. МаршрутРежимаПодтвержден=Истина означает назначенный режим и эти вызовы, не видимый индикатор и не проверку 18/23/19. Прочитайте реальные три записи результата вручную.

  5. Нажмите СоСостоянием: назначается Отображать. Отдельно наблюдайте штатное состояние во время/после формирования; длительность и фактический вид не гарантированы.

  6. Нажмите ТолькоПриФормировании: назначается ОтображатьПриФормировании. Native требует отображать состояние только при формировании; короткое формирование может быть визуально незаметным.

  7. Нажмите ВосстановитьСостояние. Setter возвращает actual сохранённое свойство, включая Авто, если именно оно было исходным; затем getter сравнивается с тем же снимком.

  8. При ошибке режимный опыт остаётся отрицательным, код пробует вернуть исходное свойство и показывает реальное прочитанное значение. Отдельная команда восстановления остаётся доступной.

Как проверить результат

  1. Каждая режимная команда подтверждает actual enum, рост двух счётчиков на 1 и тип документа события, либо сообщает диагностику без МаршрутРежимаПодтвержден.

  2. Прочтите вручную полный actual набор Утро/18, День/23, Вечер/19. Счётчики и КомпоновкаЗавершена не являются проверкой этих чисел.

  3. Появление/отсутствие состояния для НеОтображать, Отображать и ОтображатьПриФормировании подтверждается отдельно в реальном клиенте; статические тесты его не наблюдали.

  4. Исходный снимок одинаков до и после всех трёх команд. Восстановление считается программно подтверждённым только при actual равенстве свойства снимку.

  5. После диагностики МаршрутРежимаПодтвержден=Ложь; попытка восстановления в catch не объявляет положительный результат прежнего опыта.

Ожидаемый результат

Подготовлен полный маршрут изменения штатного состояния отчёта, наблюдения событий и возврата actual исходного свойства, с отдельной ручной проверкой индикатора/данных.

На что обратить внимание

  1. Runtime 0. Полученное свойство/тип/счётчик события не доказывает визуальное отображение или правильность числового отчёта; все три температуры и реальный UI проверяются вручную.

  2. Стандартная СКД может использовать собственную разметку/порядок. В этих уроках нет придуманной фиксированной координаты, имени auto-области или автоматического reader чисел.

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

  4. Работайте только с собственными подготовленными формами, новым пользователем и новой базой. Не открывайте/закрывайте чужие окна и не переносите опыт на рабочего пользователя.

  5. Не отключайте диагностику и не ставьте подтверждающие флаги вручную. Ошибка API, неверный тип или неподтверждённый маршрут оставляют соответствующую проверку отрицательной.

  6. Авто именно в свойствах отчёта эквивалентно Отображать. Не переносите это утверждение на все другие владельцы enum.

  7. Не удлиняйте опыт блокирующим ожиданием/внешним запросом ради индикатора. Если быстрый собственный отчёт не даёт заметного состояния, честно фиксируйте визуальную проверку как неподтверждённую.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.