Расширение поля формы для поля графической схемы

Типы · Form field extension for a graphical schema field

Содержит свойства, специфичные для поля вида ПолеГрафическойСхемы.

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

Расширение поля формы для поля графической схемы (Form field extension for a graphical schema field)

Расширение поля формы для поля графической схемы (Form field extension for a graphical schema field)

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

Свойства:
АвтоМаксимальнаяВысота (AutoMaxHeight)
АвтоМаксимальнаяШирина (AutoMaxWidth)
Вывод (Output)
Высота (Height)
МаксимальнаяВысота (MaxHeight)
МаксимальнаяШирина (MaxWidth)
РастягиватьПоВертикали (VerticalStretch)
РастягиватьПоГоризонтали (HorizontalStretch)
Редактирование (Edit)
ТекущийЭлемент (CurrentItem)
ЦветРамки (BorderColor)
Ширина (Width)

События:
Выбор (Selection)
ПередЗаписью (BeforeWrite)
ПередПечатью (BeforePrint)
ПослеЗаписи (AfterWrite)
ПриАктивизации (OnActivate)

Описание:

Содержит свойства, специфичные для поля вида ПолеГрафическойСхемы.

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

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

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

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

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

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

Управляемое поле схемы: размеры, текущий элемент и ограничение вывода

Полный модуль управляемой формы. Настройки поля выполняются на сервере, а текущий элемент выбирается клиентом из своей реально подготовленной схемы. ЦветРамки разобран как legacy свойство без обещания визуального эффекта в8.5.

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

Полный модуль управляемой формы собственной CF. Server создание/настройки поля, client CurrentItem и memory roundtrip. Не обычная форма.

Подготовка

  1. Собственная новая пустая CF УчебныеПоляГрафическойСхемы85 на точной платформе8.5.1.1343, без рабочих объектов, расширений, подписок и регламентных заданий. Создайте Задача85: номер Строка9 с автонумерацией, наименование100, без адресации/проверок/обработчиков. Ни задача, ни процесс в уроке не записываются и не запускаются.

  2. Создайте БизнесПроцесс Маршрут85: номер Строка9 с автонумерацией, свойство Задача=Задача85. Карта маршрута: Старт85 → одиночное действие Подготовить85 → Завершить85. Соедините двумя стрелками, без других элементов/декораций/условий. Представление действия «Подготовить свою учебную книгу». Модули процесса/задачи и события карты пустые; обновите только свою CF.

  3. Форма учебной внешней обработки принадлежит только этой новой CF. Код через СоздатьБизнесПроцесс и ПолучитьКартуМаршрута получает реально подготовленную карту в памяти. Коллекция схемы не имеет Добавить: новые точки честно создаются в Конфигураторе, не фиктивным вызовом к несуществующему API.

  4. Ожидаются три точки и две линии, всего5 элементов. Точка действия сначала найдена на сервере/толстом клиенте по настоящему БизнесПроцессы.Маршрут85.ТочкиМаршрута.Подготовить85, ее readonly Имя передается клиенту. Тонкий клиент не обращается к сервер-only ТочкиМаршрута менеджера.

  5. Записать/Прочитать используют лишь свои ПотокВПамяти и поток своих байтов, не имя файла, XML или внешний источник. Получена отдельная копия: число элементов/цвет/поле страницы сохраняются, изменение копии15→20 не меняет исходник15. Не выдавайте присваивание ссылки за независимую копию.

  6. Это авторский учебный код и статические проверки. Никакие GUI,1С,принтеры,сеть,файлы или процессы во время подготовки справочника не запускались. В будущих ручных проверках используйте только свою карту и свой новый стенд.

  7. Создайте отдельную управляемую форму внешней обработки УчебнаяКартаManaged85. Реквизиты формы: Схема85 ГрафическаяСхема, ИмяДействия85 Строка, Статус85 Строка. На форму добавьте поле ПолеСхемы85 вида ПолеГрафическойСхемы, ПутьКДанным=Схема85. Строковые реквизиты только просмотра.

  8. Свяжите ПриСозданииНаСервере с одноименной процедурой. Команды/кнопки ВыбратьПодготовку85 и ПроверитьНезависимуюКопию85 — с одноименными client действиями. Вставьте весь основной модуль. Положительный stream вариант рассчитан на thin/thick managed desktop; веб-клиент сознательно исключен из Прочитать в installed help.

  9. Размеры72×18 и максимумы90×24 задаются в символах, не в пикселях/миллиметрах. АвтоМаксимальнаяШирина/Высота=Ложь делает явные максимумы действующими. Horizontal stretch включен, vertical stretch отключен; UI компоновка отдельно проверяется человеком.

  10. Поле.Вывод=Запретить и документ.Вывод=Запретить остаются ограничениями печати/сохранения/буфера. В этом модуле нет native печати, записи файлов или clipboard вызовов. Не добавляйте изменения размеров/серверные вызовы в ПриАктивизации: native запрещает это в таком событии. Этот модуль не содержит этого обработчика.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Данные = ПолучитьСвоюКарту85();
    Схема85 = Данные.Схема;
    ИмяДействия85 = Данные.ИмяДействия;
    Поле = Элементы.ПолеСхемы85;
    Поле.АвтоМаксимальнаяШирина = Ложь;
    Поле.АвтоМаксимальнаяВысота = Ложь;
    Поле.Ширина = 72;
    Поле.Высота = 18;
    Поле.МаксимальнаяШирина = 90;
    Поле.МаксимальнаяВысота = 24;
    Поле.РастягиватьПоГоризонтали = Истина;
    Поле.РастягиватьПоВертикали = Ложь;
    Поле.Редактирование = Ложь;
    Поле.Вывод = ИспользованиеВывода.Запретить;
    Поле.ЦветРамки = Новый Цвет(37, 99, 235);
    Если Поле.АвтоМаксимальнаяШирина Или Поле.АвтоМаксимальнаяВысота Или Поле.Ширина <> 72 Или Поле.Высота <> 18
        Или Поле.МаксимальнаяШирина <> 90 Или Поле.МаксимальнаяВысота <> 24 Или Не Поле.РастягиватьПоГоризонтали
        Или Поле.РастягиватьПоВертикали Или Поле.Редактирование Или Поле.Вывод <> ИспользованиеВывода.Запретить
        Или Поле.ЦветРамки <> Новый Цвет(37, 99, 235) Тогда
        ВызватьИсключение "Свойства своего managed поля не прочитаны обратно";
    КонецЕсли;
    Статус85 = "Собственная карта; размеры в символах. ЦветРамки не применяется в интерфейсе Версия8.5";
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьПодготовку85(Команда)
    #Если ТонкийКлиент Или ТолстыйКлиентУправляемоеПриложение Тогда
        Подготовка = Схема85.ЭлементыГрафическойСхемы.Найти(ИмяДействия85);
        Если Подготовка = Неопределено Или ТипЗнч(Подготовка) <> Тип("ЭлементГрафическойСхемыДействие") Тогда
            ВызватьИсключение "Нет собственной реальной точки действия";
        КонецЕсли;
        Поле = Элементы.ПолеСхемы85;
        Поле.ТекущийЭлемент = Подготовка;
        Если Поле.ТекущийЭлемент <> Подготовка Тогда
            ВызватьИсключение "Своя текущая точка не выбрана";
        КонецЕсли;
        Статус85 = "Выбрана реальная собственная точка " + Подготовка.Имя;
    #Иначе
        ВызватьИсключение "Этот полный вариант со stream roundtrip ограничен настольным managed клиентом";
    #КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьНезависимуюКопию85(Команда)
    #Если ТонкийКлиент Или ТолстыйКлиентУправляемоеПриложение Тогда
        Копия = КопироватьСвоюСхемуНаКлиенте85(Схема85);
        Копия.ПолеСлева = 20;
        Если Схема85.ПолеСлева <> 15 Или Копия.ПолеСлева <> 20 Или Копия.ЭлементыГрафическойСхемы.Количество() <> 5 Тогда
            ВызватьИсключение "Memory roundtrip должен сохранить маршрут и отделить копию";
        КонецЕсли;
        Статус85 = "Исходник15, копия20; три точки и две линии сохранены. Печати и файлов нет";
    #Иначе
        ВызватьИсключение "Прочитать из потока в этой версии не поддержан веб-клиентом";
    #КонецЕсли;
КонецПроцедуры

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

&НаКлиенте
Функция КопироватьСвоюСхемуНаКлиенте85(Источник)
    Если ТипЗнч(Источник) <> Тип("ГрафическаяСхема") Тогда
        ВызватьИсключение "Копируется только собственная графическая схема";
    КонецЕсли;
    Запись = Новый ПотокВПамяти;
    Попытка
        Источник.Записать(Запись);
        Байты = Запись.ЗакрытьИПолучитьДвоичныеДанные();
    Исключение
        Запись.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Чтение = Байты.ОткрытьПотокДляЧтения();
    Копия = Новый ГрафическаяСхема;
    Попытка
        Копия.Прочитать(Чтение);
    Исключение
        Чтение.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Чтение.Закрыть();
    Если Копия.ЭлементыГрафическойСхемы.Количество() <> Источник.ЭлементыГрафическойСхемы.Количество()
        Или Копия.ПолеСлева <> Источник.ПолеСлева Или Копия.ЦветФона <> Источник.ЦветФона Тогда
        ВызватьИсключение "Свой memory roundtrip не сохранил структуру и настройки";
    КонецЕсли;
    Возврат Копия;
КонецФункции

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

  1. ПриСозданииНаСервере получает карту своего незаписанного процесса. ТочкиМаршрута используются только сервером; client получает настоящее readonly имя найденного действия, не произвольный идентификатор.

  2. Элементы.ПолеСхемы85 — реальное managed поле с заранее привязанным Схема85. Тип расширения в exporter называется Расширение графической схемы; native заголовок — Расширение поля формы для поля графической схемы. Это не standalone ПолеГрафическойСхемы ctor.

  3. Оба automatic maxima отключены. Затем задаются ширина72, высота18, максимум90×24 и разные stretch флаги; весь набор readback проверяется сервером. Условия с maximum0 означали бы отсутствие ограничения, здесь0не используется.

  4. Редактирование=Ложь относится к изменению схемы в UI; Вывод=Запретить — к печати/сохранению/буферу. Это разные настройки, не права на всю ИБ и не защита от программного изменения своей копии.

  5. ЦветРамки присваивается и читается как native legacy API, но статус прямо говорит: в интерфейсе Версия8.5 он не применяется. Сохранение цвета не называется видимой синей рамкой; native UI поведение не выдумывается.

  6. ТекущийЭлемент имеет client-only availability по своей странице. Client ищет именно собственное действие из Схема85 по настоящему имени; setter и readback происходят клиентом, не в server ПриСоздании.

  7. ПроверитьНезависимуюКопию85 сериализует только свою схему в ПотокВПамяти и читает собственные байты новым документом. Изменяет поле копии15→20, подтверждает исходник15 и карту5. Схема не сохраняется в файл/базу, процесс не запускается.

  8. Открытие/выбор не вызывает HTTP/XML/историю/копии БД/печать/установку событий. Нет blanket действия server в активизации; пользовательские проверки размеров выполняются безопасно при создании либо отдельной явной client команде.

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

  1. Server readback подтверждает false automatic maxima,72/18,90/24, horizontal true/vertical false, editing false/output deny. Пиксельного совпадения UI code не обещает.

  2. ВыбратьПодготовку85 в thin/thick managed выбирает реальную собственную точку и подтверждает CurrentItem. Отсутствующая точка вызывает отказ, без выбора первого случайного элемента.

  3. Memory roundtrip дает карту5, исходное поле15/копия20; документ UI не меняется. Нет пути файла или внешнего XDTO/XML сериализатора.

  4. В интерфейсе Версия8.5 не ждите изменения видимой рамки от ЦветРамки. Это прямо ограничено native help, не ошибка при readback RGB свойства.

  5. Серверный код не читает и не назначает ТекущийЭлемент. Из client ПриАктивизации не выполняются server calls или свойства, требующие server RPC; такой обработчик не написан.

  6. Web full сценарий отказывает до синхронного Прочитать. Static проверки не выдаются за runtime/отрисовку формы; runtimeVerifiedScenarios=0.

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

Собственная управляемая форма имеет точные настройки размеров/ограничений/растягивания, client выбор реально существующего действия и независимую memory копию. Ordinary-control API и legacy визуальные обещания не подмешаны.

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

  1. Native Ширина/Высота задаются в символах. Описание Высота в installed help содержит слово ширина, а РастягиватьПоВертикали — календаря: это редакционные неточности. Код не переименовывает свойства и не делает из единиц пиксели.

  2. Native ТекущийЭлемент отсутствует в server availability своей страницы, хотя общая страница расширения включает server. Поэтому оно применяется исключительно client командой после получения своего настоящего документа.

  3. В интерфейсе Версия8.5 ЦветРамки не применяется. Числа и цвет readback не являются доказанным видом конкретного клиента/темы или гарантией размеров экрана.

  4. ГрафическаяСхема.Прочитать из потока не имеет web availability в installed help. Desktop guards обязательны, managed возможность вида поля не расширяет availability underlying stream read.

  5. Свой route fixture создается в Конфигураторе; коллекция графики не имеет Добавить. Не добавляйте fictional shape creators, не запускайте рабочий процесс для получения своей карты.

  6. Примеры не запускались: нет actual1C/GUI/печати/файлов/сети. Свои потоки — лишь future BSL операции в памяти; статические проверки не означают runtimeVerified.

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

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

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

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

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