ПолеГрафическойСхемы.Рамка

Свойства · Border

Тип: Рамка. Содержит параметры рамки вокруг поля графической схемы.

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

ПолеГрафическойСхемы.Рамка (GraphicalSchemaField.Border)

ПолеГрафическойСхемы (GraphicalSchemaField)

Рамка (Border)

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

Использование:
Чтение и запись.
Описание:
Тип: Рамка.
Содержит параметры рамки вокруг поля графической схемы.
Доступность:

Толстый клиент.

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

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

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

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

Обычное поле схемы: конструктор, карта, независимая копия и очистка

Полный модуль обычной формы толстого клиента. Реальная своя карта отображается в заранее созданном собственном поле, а самостоятельный ПолеГрафическойСхемы используется для проверки Set/Get/Очистить. Печать — отдельная явно разрешенная команда, здесь не выполнялась.

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

Полный модуль обычной формы собственной учебной обработки. Только толстое обычное приложение, не managed поле и не server module.

Подготовка

  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. Создайте обычную форму внешней обработки УчебнаяКарта85, запускайте только толстым клиентом в обычном приложении. В редакторе формы разместите элемент управления ПолеГрафическойСхемы с именем ПолеСхемы85. Создайте реквизиты Статус85 Строка для сообщения и ПодтверждениеПечати85 Строка. Вставьте весь основной модуль, не внутрь обработчика.

  8. Добавьте три кнопки: Подготовить85,ОчиститьИВернуть85,ПечатьТолькоСвоейКопии85; действия — одноименные процедуры с параметром Кнопка. Открытие формы не создает процессов/задач/файлов и не печатает. Сначала Подготовить85: создает собственную карту и показывает поле только для просмотра.

  9. Печать не нужна для memory-проверки. Для отдельного будущего разрешенного испытания только своей схемы подготовьте собственный тестовый виртуальный принтер без рабочих очередей/автопечати, введите МОЙ УЧЕБНЫЙ ВИРТУАЛЬНЫЙ ПРИНТЕР. Диалог всегда показан: выберите именно свое тестовое устройство либо отмените. Не используйте рабочий физический принтер. Этот шаг здесь не выполнялся.

Перем ИсходнаяСхема85;
Перем ИмяДействия85;
Перем ПечатьМоглаНачаться85;

Процедура Подготовить85(Кнопка)
    #Если ТолстыйКлиентОбычноеПриложение Тогда
        Если ИсходнаяСхема85 <> Неопределено Тогда
            ВызватьИсключение "Откройте новую собственную форму для нового опыта";
        КонецЕсли;
        Данные = ПолучитьСвоюКарту85();
        ИсходнаяСхема85 = Данные.Схема;
        ИмяДействия85 = Данные.ИмяДействия;
        ПечатьМоглаНачаться85 = Ложь;
        ВременноеПоле = Новый ПолеГрафическойСхемы;
        ВременноеПоле.УстановитьСхему(КопироватьСвоюСхему85(ИсходнаяСхема85));
        Полученная = ВременноеПоле.ПолучитьСхему();
        Если Полученная.ЭлементыГрафическойСхемы.Количество() <> 5 Или Полученная.ПолеСлева <> 15 Тогда
            ВызватьИсключение "Конструктор поля и Set/Get не вернули собственную карту";
        КонецЕсли;
        Полученная.ПолеСлева = 20;
        ВременноеПоле.УстановитьСхему(Полученная);
        Если ВременноеПоле.ПолучитьСхему().ПолеСлева <> 20 Или ИсходнаяСхема85.ПолеСлева <> 15 Тогда
            ВызватьИсключение "Копия поля должна быть независима от исходной карты";
        КонецЕсли;
        ВременноеПоле.Очистить();
        Если ВременноеПоле.ПолучитьСхему().ЭлементыГрафическойСхемы.Количество() <> 0 Тогда
            ВызватьИсключение "Очистка временного собственного поля не подтверждена";
        КонецЕсли;
        Поле = ЭлементыФормы.ПолеСхемы85;
        Поле.УстановитьСхему(КопироватьСвоюСхему85(ИсходнаяСхема85));
        Поле.Доступность = Истина;
        Поле.ПрозрачныйФон = Ложь;
        Поле.ТолькоПросмотр = Истина;
        Поле.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
        Поле.ЦветРамки = Новый Цвет(37, 99, 235);
        Если Не Поле.Доступность Или Поле.ПрозрачныйФон Или Не Поле.ТолькоПросмотр
            Или Поле.Рамка.ТипРамки <> ТипРамкиЭлементаУправления.Одинарная Или Поле.Рамка.Толщина <> 1
            Или Поле.ЦветРамки <> Новый Цвет(37, 99, 235) Тогда
            ВызватьИсключение "Настройки собственного обычного поля не совпали";
        КонецЕсли;
        СхемаПоля = Поле.ПолучитьСхему();
        Подготовка = СхемаПоля.ЭлементыГрафическойСхемы.Найти(ИмяДействия85);
        Если Подготовка = Неопределено Тогда
            ВызватьИсключение "Нет собственной точки в отображаемой копии";
        КонецЕсли;
        Поле.ТекущийЭлемент = Подготовка;
        Если Поле.ТекущийЭлемент <> Подготовка Тогда
            ВызватьИсключение "Выбор своего текущего элемента не подтвержден";
        КонецЕсли;
        Статус85 = "Обычное поле содержит собственную карту; только просмотр, независимый roundtrip проверен";
    #Иначе
        ВызватьИсключение "ПолеГрафическойСхемы и его конструктор требуют толстого обычного клиента";
    #КонецЕсли;
КонецПроцедуры

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

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

Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 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. Толстый обычный клиент проверяется препроцессором. ПолучитьСвоюКарту85 проверяет точную новую CF/версию/свои процесс и задачу, получает карту незаписанного процесса с5элементами и настоящим одиночным действием.

  2. Новый ПолеГрафическойСхемы — настоящий нативный объект поля, не объект графического документа. Временное поле принимает отдельную копию карты, ПолучитьСхему возвращает документ. Изменение поля страницы15→20 и повторное Set/Get подтверждают независимость от исходника.

  3. Очистить временного поля дает схему с0элементами, исходник остается5. Этот объект не объявляется прикрепленным к форме: видимое поле отдельно действительно создано в редакторе обычной формы.

  4. Настраиваем реальное ЭлементыФормы.ПолеСхемы85: доступно, непрозрачный фон, только просмотр, новая одинарная Рамка толщиной1 и цвет. Рамка не подменяется строкой/enum напрямую; native цвет при Выпуклой/Вдавленной рамке может игнорироваться, поэтому выбрана Одинарная.

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

  6. ОчиститьИВернуть85 сначала подтверждает0у своего поля и5у источника, затем УстановитьСхему новой собственной копии возвращает5. Не меняется карта метаданных, не удаляются бизнес-процессы или файлы.

  7. Отдельная печатная копия получает Вывод=Разрешить, исходная и видимая схемы остаются с ограничением вывода. Новый печатный контрол получает только свою копию. Напечатать получает точный enum РежимИспользованияДиалогаПечати.Использовать, а не Булево из неточного старого примера.

  8. Флаг возможной печати установлен до настоящего native вызова, повтор неизвестного исхода запрещен. Метод возвращает управление без сведений о physical print/cancel; текст не обещает отпечаток, PDF или успешный файл.

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

  1. Подготовить85: карта5, поле страницы исходника15, копии20; временное поле после очистки0, видимое поле снова5. Поле доступно и ТолькоПросмотр=Истина, выбран собственный элемент действия.

  2. ОчиститьИВернуть85: поле0→5, исходник5, новые процессы/задачи не записаны. Нет команды Start/Записать бизнес-процесса или пути к файлу.

  3. В thin/web или с другой версией/CF/метадатой урок должен отказать. Конструктор поля не используется как managed FormField API.

  4. Попробуйте другое имя реального действия/отсутствующее действие в своей учебной карте: положительный выбор не должен произойти. Не присваивайте вымышленное Имя readonly элемента, чтобы тест «прошел».

  5. Печатная команда без отдельного подтверждения отказывает до native вызова. В отдельном разрешенном опыте отмена диалога/неизвестный исход не считаются напечатанным результатом и не приводят к automatic retry.

  6. Здесь runtime-проверок нет: static API/checks не являются показанным GUI, исправной очередью принтера или успешным отрисованным элементом.

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

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

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

  1. ПолеГрафическойСхемы доступно только толстому клиенту. Управляемое поле другой API, поэтому нельзя перенести эти Set/Get/Очистить/Напечатать на Элементы managed формы.

  2. Конструктор самостоятельного поля не доказывает его отображение в форме. В уроке оно нужно для реального memory roundtrip и отдельно для печатного вызова; видимое поле явно создается человеком в обычной форме.

  3. Напечатать реально обращается к подсистеме печати. Ни принтер, ни файл, ни GUI здесь не использовались; runtimeVerifiedScenarios=0. Подтверждение пользователя в будущей форме не разрешает агенту выполнить реальную печать сейчас.

  4. ПолеТолькоПросмотр — режим редактирования UI, не запрет программного Set/Clear. Ограничение Вывод документа не заменяет права всей базы; печатная копия отделена от исходника, разрешение не меняет рабочую карту.

  5. Количество5 само по себе не доказывает полное тождество схем. Дополнительно проверяются конкретное действие, цвет, поле страницы и независимость изменения. Собственный поток закрывается и при ошибке.

  6. Рамка/цвет/прозрачность — свойства ordinary контрола. Для managed интерфейса Версия8.5 цвет рамки не применяется по installed help; не переносите визуальные обещания между этими режимами.

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

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

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

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

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