ДиалогВыбораТипаДиаграммы.Показать

Методы · Show

Открывает немодальный диалог выбора типа диаграммы. По умолчанию будет установлен тип диаграммы, установленный в свойстве ТипДиаграммы. Для выбора будут доступны типы диаграммы, установленные в свойстве ДоступныеТипыДиаграммы.

Синтаксис

Показать(<ОписаниеОповещенияОЗакрытии>)
Полное описание, параметры и ограничения

ДиалогВыбораТипаДиаграммы.Показать (ChartTypeChooseDialog.Show)

ДиалогВыбораТипаДиаграммы (ChartTypeChooseDialog)

Показать (Show)

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

Синтаксис:
Показать(<ОписаниеОповещенияОЗакрытии>)
Параметры:

<ОписаниеОповещенияОЗакрытии> (необязательный)
Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после закрытия диалога со следующими параметрами:
<ТипДиаграммы> - ТипДиаграммы – тип диаграммы выбран. Неопределено - в противном случае;

<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.

Если параметр не указан или имеет тип Неопределено, то по завершении никакая процедура вызвана не будет.

Описание:

Открывает немодальный диалог выбора типа диаграммы.
По умолчанию будет установлен тип диаграммы, установленный в свойстве ТипДиаграммы.
Для выбора будут доступны типы диаграммы, установленные в свойстве ДоступныеТипыДиаграммы.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.

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

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

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

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

Выбрать вид собственной диаграммы и сохранить реальные данные

Самостоятельный учебный процесс с настоящим диалогом платформы, собственными подготовленными данными, независимой проверкой результата и отдельным объяснением отмены. Все изменения только в памяти своей формы.

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

Полный модуль собственной управляемой формы новой пустой файловойCF8.5.1.1343; толстый управляемый Windowsx64 клиент. Модальный вариант только в отдельной CF. ActualUI/1C/БД/файлы/сеть0.

Подготовка

  1. Создайте новую собственную пустую файловую ИБ платформы ровно 8.5.1.1343. Русский встроенный язык, управляемое приложение, совместимость «Не использовать». Рабочие конфигурации, чужие формы, действующие задания и данные не использовать.

  2. Конфигурация не содержит справочников, документов, регистров, планов, задач, общих реквизитов, внешних источников, подписок и регламентных заданий. Нет расширений БД и сеанса. Полный guard проверяет все эти условия, три источника расширений и отсутствие активной транзакции.

  3. Используйте только толстый управляемый клиент Windows x64 под своим учебным профилем. Справка у диалогов содержит и другие клиенты, но поля РасписаниеРегламентногоЗадания доступны на сервере, в толстом клиенте и внешнем соединении; их чтение в тонком клиенте здесь не выдумывается.

  4. Для выбора диаграммы и немодального расписания имя корня CF — УчебныеДиалогиДиаграммыИРасписания85. Свойство конфигурации Режим использования модальности — Не использовать. Код проверяет это, а не открывает модальное окно вопреки настройке.

  5. Для ОткрытьМодально создайте ДРУГУЮ новую пустую CF УчебныйМодальныйДиалогРасписания85. Только в ней явно задайте Режим использования модальности — Использовать. Это отдельный учебный вариант, не инструкция менять режим рабочей конфигурации.

  6. Внешняя обработка OwnChartScheduleDialog85: одна управляемая форма. Общие реквизиты ПодтверждаюСвойСтенд85 — Булево, начально Ложь; Занято85 — Булево, начально Ложь и ТолькоПросмотр; Статус85 — Строка неограниченной длины, многострочная, ТолькоПросмотр. Вставьте весь модуль одной карточки; не объединяйте одинаковые обработчики.

  7. Для диаграммы добавьте реквизит Диаграмма85 типа Диаграмма. Перетащите его на форму, создайте элемент вида Поле диаграммы с ПутьКДанным=Диаграмма85. Источник данных и автоматическое транспонирование не задавать. Кнопки: ПодготовитьСвоюДиаграмму85, ВыбратьТипЧерезЖдать85, ВыбратьТипЧерезОповещение85.

  8. Диаграмма заполняется собственными вычислениями: одна серия «Выручка, руб.», утром 3 книги по 250 = 750, вечером 5 по 250 = 1250. После подготовки и смены типа реальные значения перечитываются из двух ячеек, сумма должна быть 2000. Смена оформления не заменяет данные.

  9. У ДоступныеТипыДиаграммы свойство только для чтения: ему нельзя присвоить новый массив. Код получает настоящий массив, очищает его и добавляет Гистограмма/График, затем повторно читает свойство и проверяет ровно эти два типа. Если изменение массива не отразилось, выбор не запускается. Диалог.ТипДиаграммы задает начальное выделение, а не выбранный результат.

  10. Для каждого немодального выбора создается новый собственный UUID-контекст. ОписаниеОповещения действительно связано с экспортным обработчиком завершения из двух параметров: результат и контекст. Ошибка связывается отдельным обработчиком из трех параметров. Не вызывайте эти обработчики вручную с придуманными результатами.

  11. Показать выбора типа документирует Неопределено при отсутствии выбора. Для ВыбратьАсинх справка описывает выбранный тип, но явно не называет результат отмены; код проверяет тип и безопасно обрабатывает Неопределено, не обещая эту ветку как документированный обязательный результат Promise.

  12. Для немодального расписания кнопки: ПодготовитьСвоеРасписание85, ИзменитьЧерезЖдать85, ИзменитьЧерезОповещение85. Рабочий объект и кандидат создаются отдельно настоящим Новый РасписаниеРегламентногоЗадания. Диалог получает только кандидата, поэтому отмена не требует откатывать рабочий объект.

  13. Учебное расписание только в памяти: 10.10.2026, 08:00–10:00, без дней недели, месяцев и детальных расписаний. ПериодПовтораДней=1, остальные специальные ограничения нулевые. В диалоге меняйте только начало на 09:00, остальные поля не трогайте. Получится нормальное часовое окно 09:00–10:00. Все 15 полей проверяются на конкретные собственные значения, а не принимается любой непустой объект.

  14. ТребуетсяВыполнение проверяет конкретные даты, не запускает задание. Перед началом и после конца окна — Ложь, на границах — Истина, на соседних датах — Ложь. Даты предыдущих запусков не передаются: по справке задание считается не запускавшимся, условия повторного запуска этим опытом не доказываются.

  15. Свойство ДиалогРасписанияРегламентногоЗадания.Расписание только для чтения: оно не присваивается. Результат Ждать или оповещения сверяется как настоящее РасписаниеРегламентногоЗадания; Неопределено означает закрытие не по OK. Изменения отдельного кандидата при отмене допускаются, но рабочий объект остается исходным.

  16. В экспорте конструктор диалога назван «По умолчанию», но родная страница HBK говорит «По расписанию» и требует обязательный аргумент Расписание. Код всегда передает реальный собственный объект. Вызов без аргумента запрещен; имя карточки не меняет контракт.

  17. Для модальной формы добавьте ПодтверждаюЗакрытиеЧерезOK85 — Булево, начально Ложь. Кнопки: ПодготовитьСвойМодальныйОпыт85, ОткрытьСвойМодальныйДиалог85, ЯвноПринятьТолькоСвойOK85, ОтброситьМодальногоКандидата85. Новое открытие сбрасывает подтверждение. Значение Bool показывается, но не используется для угадывания OK/Отмена: справка не расшифровывает его значения.

  18. При модальном опыте только после реального нажатия OK вручную подтвердите его и отдельно примите проверенного кандидата. После Отмена не ставьте подтверждение: отдельной командой отбросьте кандидат, даже если его поля изменились во время редактирования. Это ваше явное решение, не автоматически доказанная кнопка закрытия.

  19. Подготовка явно создает заново только свою диаграмму или объект расписания в памяти. Не выполняйте ее пока идет диалог; не меняйте данные формы параллельно. После успешного выбора расписания следующему независимому опыту нужна новая явная подготовка исходного окна.

  20. ActualUI/1C/files/DB/network0: здесь только авторство и статические проверки по установленной справке. Диалоги, задания, база и сеть не запускались и не изменялись. Расписание никуда не записывается, фоновые работы не создаются. Корень проекта только читался; резервные копии и архивы не создавались.

&НаКлиенте
Перем КонтекстДиаграммы85;

&НаКлиенте
Процедура ПодготовитьСвоюДиаграмму85(Команда)
    ПроверитьСвоегоКлиента85();
    Если Занято85 Тогда
        ВызватьИсключение "Сначала закройте свой текущий диалог";
    КонецЕсли;
    Диаграмма85 = Новый Диаграмма;
    Диаграмма85.АвтоТранспонирование = Ложь;
    Диаграмма85.ТипДиаграммы = ТипДиаграммы.Гистограмма;
    Серия = Диаграмма85.УстановитьСерию("Выручка, руб.");
    Утро = Диаграмма85.УстановитьТочку("Утро");
    Вечер = Диаграмма85.УстановитьТочку("Вечер");
    Диаграмма85.УстановитьЗначение(Утро, Серия, 3 * 250);
    Диаграмма85.УстановитьЗначение(Вечер, Серия, 5 * 250);
    ПроверитьСвоиДанныеДиаграммы85();
    КонтекстДиаграммы85 = Неопределено;
    Статус85 = "Своя гистограмма: утром3×250=750, вечером5×250=1250, всего2000. Только данные формы";
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьСвоиДанныеДиаграммы85()
    Если ТипЗнч(Диаграмма85) <> Тип("Диаграмма") Или Диаграмма85.КоличествоСерий <> 1
        Или Диаграмма85.КоличествоТочек <> 2 Или Диаграмма85.Серии[0].Значение <> "Выручка, руб."
        Или Диаграмма85.Точки[0].Значение <> "Утро" Или Диаграмма85.Точки[1].Значение <> "Вечер" Тогда
        ВызватьИсключение "Нужна подготовленная собственная диаграмма1серия/2точки, без источника данных";
    КонецЕсли;
    Утро = Диаграмма85.ПолучитьЗначение(0, 0);
    Вечер = Диаграмма85.ПолучитьЗначение(1, 0);
    Если ТипЗнч(Утро.Значение) <> Тип("Число") Или ТипЗнч(Вечер.Значение) <> Тип("Число")
        Или Утро.Значение <> 750 Или Вечер.Значение <> 1250
        Или Утро.Значение + Вечер.Значение <> 2000 Тогда
        ВызватьИсключение "Независимый readback должен дать именно750/1250/2000";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Функция НачатьСвойВыбор85()
    ПроверитьСвоегоКлиента85();
    Если Занято85 Тогда
        ВызватьИсключение "Второй диалог одновременно не запускаем";
    КонецЕсли;
    ПроверитьСвоиДанныеДиаграммы85();
    Если Диаграмма85.ТипДиаграммы <> ТипДиаграммы.Гистограмма
        И Диаграмма85.ТипДиаграммы <> ТипДиаграммы.График Тогда
        ВызватьИсключение "В своем опыте разрешены только2типа";
    КонецЕсли;
    Диалог = Новый ДиалогВыбораТипаДиаграммы;
    Допустимые = Диалог.ДоступныеТипыДиаграммы;
    Если ТипЗнч(Допустимые) <> Тип("Массив") Тогда
        ВызватьИсключение "Readonly свойство должно дать настоящий изменяемый native массив";
    КонецЕсли;
    Допустимые.Очистить();
    Допустимые.Добавить(ТипДиаграммы.Гистограмма);
    Допустимые.Добавить(ТипДиаграммы.График);
    Диалог.ТипДиаграммы = Диаграмма85.ТипДиаграммы;
    Проверенные = Диалог.ДоступныеТипыДиаграммы;
    Если Проверенные.Количество() <> 2 Или Проверенные[0] <> ТипДиаграммы.Гистограмма
        Или Проверенные[1] <> ТипДиаграммы.График Или Диалог.ТипДиаграммы <> Диаграмма85.ТипДиаграммы Тогда
        ВызватьИсключение "Fresh readback должен подтвердить ровно2доступных типа и свою исходную настройку";
    КонецЕсли;
    К = Новый Структура("UUID,Диалог,ИсходныйТип", Строка(Новый УникальныйИдентификатор), Диалог, Диаграмма85.ТипДиаграммы);
    КонтекстДиаграммы85 = К;
    Занято85 = Истина;
    Статус85 = "Открывается собственный выбор типа; данные750/1250 не изменяются";
    Возврат К;
КонецФункции

&НаКлиенте
Асинх Процедура ВыбратьТипЧерезЖдать85(Команда)
    К = НачатьСвойВыбор85();
    Попытка
        Результат = Ждать К.Диалог.ВыбратьАсинх();
        ЗавершитьСвойВыбор85(Результат, К);
    Исключение
        КонтекстДиаграммы85 = Неопределено;
        Занято85 = Ложь;
        Статус85 = "Ждать/проверка выбора не подтверждены; автоматического повтора нет";
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьТипЧерезОповещение85(Команда)
    К = НачатьСвойВыбор85();
    Завершение = Новый ОписаниеОповещения("СвойТипВыбран85", ЭтотОбъект, К,
        "ОшибкаСвоегоТипа85", ЭтотОбъект);
    Попытка
        К.Диалог.Показать(Завершение);
    Исключение
        КонтекстДиаграммы85 = Неопределено;
        Занято85 = Ложь;
        Статус85 = "Начало показа не подтвердилось; никакой type-selection success не заявлен";
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура СвойТипВыбран85(Результат, К) Экспорт
    Попытка
        ЗавершитьСвойВыбор85(Результат, К);
    Исключение
        КонтекстДиаграммы85 = Неопределено;
        Занято85 = Ложь;
        Статус85 = "Callback выбора/проверка не подтверждены; чужой результат не присваивается";
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ОшибкаСвоегоТипа85(ИнформацияОбОшибке, СтандартнаяОбработка, К) Экспорт
    СтандартнаяОбработка = Ложь;
    Если КонтекстДиаграммы85 <> Неопределено И К.UUID = КонтекстДиаграммы85.UUID Тогда
        КонтекстДиаграммы85 = Неопределено;
        Занято85 = Ложь;
    КонецЕсли;
    Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда
        Статус85 = "Native error callback: результат выбора не подтвержден";
    Иначе
        Статус85 = "Неизвестный тип ошибки выбора";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ЗавершитьСвойВыбор85(Результат, К)
    ПроверитьСвоегоКлиента85();
    Если КонтекстДиаграммы85 = Неопределено Или К.UUID <> КонтекстДиаграммы85.UUID Или Не Занято85 Тогда
        ВызватьИсключение "Не свой ожидающий контекст диалога";
    КонецЕсли;
    ПроверитьСвоиДанныеДиаграммы85();
    Если Диаграмма85.ТипДиаграммы <> К.ИсходныйТип Тогда
        ВызватьИсключение "Свою рабочую диаграмму кто-то изменил во время выбора; поверх нее не пишем";
    КонецЕсли;
    Если Результат = Неопределено Тогда
        Статус85 = "Диалог закрыт без выбранного типа: своя диаграмма и750/1250 остались прежними";
    Иначе
        Если ТипЗнч(Результат) <> Тип("ТипДиаграммы")
            Или Результат <> ТипДиаграммы.Гистограмма И Результат <> ТипДиаграммы.График Тогда
            ВызватьИсключение "Принимаем только native enum из своих2разрешенных типов";
        КонецЕсли;
        Диаграмма85.ТипДиаграммы = Результат;
        Если Диаграмма85.ТипДиаграммы <> Результат Тогда
            ВызватьИсключение "Тип диаграммы не подтвердился независимым чтением";
        КонецЕсли;
        ПроверитьСвоиДанныеДиаграммы85();
        Статус85 = "Свой выбранный тип: " + Строка(Результат) + "; данные750/1250/2000 подтверждены";
    КонецЕсли;
    КонтекстДиаграммы85 = Неопределено;
    Занято85 = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьСвоегоКлиента85()
    #Если ТолстыйКлиентУправляемоеПриложение Тогда
        Система = Новый СистемнаяИнформация;
        Если Система.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Или Не ПодтверждаюСвойСтенд85 Тогда
            ВызватьИсключение "Подтвердите только свою новую пустую ИБ, толстый управляемый Windowsx64 клиент8.5.1.1343";
        КонецЕсли;
        ПроверитьНаСервере85();
    #Иначе
        ВызватьИсключение "Этот самостоятельный маршрут не заявляет другие клиенты проверенными";
    #КонецЕсли
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПроверитьНаСервере85()
    ПроверитьСвойПустойСтенд();
    Если Метаданные.РежимИспользованияМодальности <> Метаданные.СвойстваОбъектов.РежимИспользованияМодальности.НеИспользовать Тогда
        ВызватьИсключение "Режим модальности этой самостоятельной учебнойCF должен быть НеИспользовать";
    КонецЕсли;
КонецПроцедуры

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

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

  1. Подготовьте настоящую диаграмму на форме: одна серия, две точки, 750 и 1250. Прочитанные значения и сумма 2000 проверяются до диалога.

  2. Новый диалог получает ровно два доступных типа через свой массив. Начальное выделение соответствует текущему типу собственной диаграммы. Readonly свойство массива не присваивается.

  3. ВыбратьТипЧерезЖдать85 использует Promise и Ждать. ВыбратьТипЧерезОповещение85 использует реальный Показать и обработчик закрытия с двумя параметрами.

  4. Выберите График и подтвердите. Результат должен быть настоящим ТипДиаграммы из допустимого списка. Только после проверки он применяется к собственной диаграмме; данные перечитываются независимо.

  5. Повторите с Гистограмма, затем отдельно Отмена через оповещение: Неопределено не меняет прежний вид или числовые данные. Отмену Promise обработайте по реальному наблюдаемому результату, не по выдуманному обязательному значению.

  6. Во время открытого диалога вторая команда должна отказать. Не подменяйте контекст или результат прямым вызовом обработчика.

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

  1. Реальные собственные данные подготовлены до открытия; результат не заменяется неизвестной строкой, структурой или объектом из рабочей базы.

  2. Аргументы конструкторов и методов, результаты Promise/Bool, экспортные callbacks и доступность совпадают с установленной справкой8.5.1.1343.

  3. Readonly свойства не присваиваются; повторное чтение подтверждает изменение настоящего массива/кандидата либо выбранного оформления.

  4. Отмена, ошибка и согласие пользователя не смешиваются. Рабочий объект не передается редактируемым кандидатом; повторный одновременный диалог запрещен.

  5. Нет регламентных заданий, записи расписания, файлов, сети, actualUI/1C или обещания атомарности; только авторство и статические проверки.

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

Ожидаемый ручной результат: выбранный тип применяется без изменения750/1250/2000; либо только свой проверенный объект расписания меняется08:00→09:00. Отмена не заменяет рабочие данные. Диалоги фактически здесь не запускались.

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

  1. Имя экспортированной карточки конструктора «По умолчанию» не означает ноль аргументов: диалогу расписания обязательно нужен настоящий объект.

  2. Показать/ОткрытьАсинх расписания документируют Неопределено при закрытии не поOK; модальный метод дает Bool без расшифровки его значений. Нельзя подменять один контракт другим.

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

  4. ТребуетсяВыполнение отвечает на вопрос о дате и не запускает задание. Этот пример не доказывает поведение планировщика, предыдущих запусков, фоновой очереди или доставки отчета.

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

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

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

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

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