Оформить заголовок и легенду собственной схемы

Учебные задачи

Настраиваем три отдельные области схемы и создаём образец картинки из собственной учебной геометрии, не загружая чужие изображения.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Собственная учебная база 8.5.1.1343, толстый клиент Windows. ГеографическаяСхема из этого урока недоступна в тонком/веб-клиенте: не вставляйте код в тонкий клиент.

  2. Создайте отдельную внешнюю обработку с управляемой формой, командой Выполнить и кнопкой этой команды. Вставьте весь код одного урока в модуль формы; назначьте команде обработчик Выполнить.

  3. Каждый запуск создаёт новую схему в локальной переменной. Реквизиты карты и макеты не нужны; готовые карты, SHP, GPS и сервисы карт не загружаются.

  4. Точки и зоны вымышленные учебные объекты. Координаты заданы в градусах, высота в метрах; это не местоположение пользователей или реальных заказов.

  5. На схеме нет подложки с границами стран/дорогами. Это собственная геометрия, а не полноценный навигатор. Показать открывает отдельное окно схемы.

  6. Запускайте уроки по одному. Статические проверки сверяют API установленной справки, но отрисовка и геометрические операции в 1С пока не проверены запуском.

&НаКлиенте
Процедура Выполнить(Команда)
    Схема = Новый ГеографическаяСхема;
    Схема.Обновление = Ложь;
    Схема.Проекция = ТипПроекцииГеографическойСхемы.ЦилиндрическаяРавноудаленнаяПроекция;
    Схема.СмещениеШироты = 0;
    Схема.СмещениеДолготы = 0;
    Пункты = Схема.Слои.Добавить("УчебныеПункты", Тип("ТочечныйОбъектГеографическойСхемы"));
    Пункты.Текст = "Учебные пункты";
    Пункты.Видимость = Истина;
    Пункты.РазрешитьВыбор = Истина;
    ПунктА = Пункты.Объекты.Добавить();
    ПунктА.Значение = "guide-point-A";
    ПунктА.Координаты = Новый ГеографическиеКоординаты(55, 37, 100);
    ПунктА.Видимость = Истина;
    ПунктА.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Маркер;
    ПунктА.Маркер = ТипМаркераГеографическойСхемы.БольшойКруг;
    ПунктА.Цвет = Новый Цвет(25, 95, 180);
    ПунктА.ОтображатьДанные = Ложь;
    ПунктА.Подсказка = "Вымышленный пункт А; только учебные данные";
    ПунктА.Расшифровка = Новый Структура("УчебныйКод", "guide-point-A");
    ПунктБ = Пункты.Объекты.Добавить();
    ПунктБ.Значение = "guide-point-B";
    ПунктБ.Координаты = Новый ГеографическиеКоординаты(55.1, 37.2, 110);
    ПунктБ.Видимость = Истина;
    ПунктБ.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Маркер;
    ПунктБ.Маркер = ТипМаркераГеографическойСхемы.БольшойТреугольник;
    ПунктБ.Цвет = Новый Цвет(35, 145, 75);
    Схема.ОтображатьЗаголовок = Истина;
    Схема.ОтображатьЛегенду = Истина;
    Заголовок = Схема.ОбластьЗаголовка;
    Заголовок.Текст = "Собственные учебные пункты — не реальные адреса";
    Заголовок.Выравнивание = ГоризонтальноеПоложение.Центр;
    Заголовок.Прозрачный = Ложь;
    Заголовок.ПрозрачныйФон = Ложь;
    Заголовок.ЦветТекста = Новый Цвет(25, 45, 65);
    Заголовок.ЦветФона = Новый Цвет(240, 245, 250);
    Заголовок.Шрифт = Новый Шрифт("Arial", 12);
    Заголовок.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
    Заголовок.ЦветРамки = Новый Цвет(145, 165, 185);
    Построение = Схема.ОбластьПостроения;
    Построение.Прозрачный = Ложь;
    Построение.ПрозрачныйФон = Ложь;
    Построение.ЦветФона = Новый Цвет(255, 255, 255);
    Построение.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
    Построение.ЦветРамки = Новый Цвет(180, 195, 210);
    Легенда = Схема.ОбластьЛегенды;
    Легенда.МасштабнаяЛинейка = Ложь;
    Легенда.Прозрачный = Ложь;
    Легенда.ПрозрачныйФон = Ложь;
    Легенда.Цвет = Новый Цвет(25, 45, 65);
    Легенда.ЦветФона = Новый Цвет(245, 248, 251);
    Легенда.Шрифт = Новый Шрифт("Arial", 10);
    Легенда.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
    Легенда.ЦветРамки = Новый Цвет(180, 195, 210);
    УчебнаяСерия = Пункты.Серии.Добавить("УчебнаяПодпись");
    УчебнаяСерия.ТипОтображения = ТипОтображенияСерииСлояГеографическойСхемы.Текст;
    Пункты.УстановитьЗначение(ПунктА, УчебнаяСерия, "A");
    Пункты.УстановитьЗначение(ПунктБ, УчебнаяСерия, "B");
    ПервыйОбразец = Легенда.Элементы.Добавить();
    ПервыйОбразец.Серия = УчебнаяСерия;
    ПервыйОбразец.ТекстОбразца = "A/B";
    ПервыйОбразец.ТекстПодписи = "Вымышленные учебные пункты";
    ПервыйОбразец.ОтображатьШкалу = ТипОтображенияШкалыЭлементаЛегендыГеографическойСхемы.НеОтображать;
    ПервыйОбразец.ЦветОбразца = Новый Цвет(25, 95, 180);
    ПервыйОбразец.ШрифтОбразца = Новый Шрифт("Arial", 10);
    Сообщить(Легенда.Элементы.Индекс(ПервыйОбразец) = 0);
    Сообщить(Легенда.Элементы.Получить(0) = ПервыйОбразец);
    ВременныйОбразец = Легенда.Элементы.Добавить();
    ВременныйОбразец.ТекстПодписи = "Временный образец";
    Легенда.Элементы.Сдвинуть(1, -1);
    Сообщить(Легенда.Элементы.Получить(0) = ВременныйОбразец);
    Легенда.Элементы.Удалить(ВременныйОбразец);
    Сообщить(Легенда.Элементы.Количество() = 1);
    Схема.Обновление = Истина;
    СобственнаяКартинка = Схема.ПолучитьКартинку(32, 32, ФорматКартинки.PNG, Ложь);
    Сообщить(ТипЗнч(СобственнаяКартинка) = Тип("Картинка"));
    ПервыйОбразец.Картинка = СобственнаяКартинка;
    ПунктБ.Картинка = СобственнаяКартинка;
    ПунктБ.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Картинка;
    ПунктБ.ПоложениеОпорнойТочки = ПоложениеОпорнойТочкиОтрисовки.Центр;
    СлойКартинок = Схема.Слои.Добавить("УчебныеКартинки", Тип("МноготочечныйОбъектГеографическойСхемы"));
    Картинки = СлойКартинок.Объекты.Добавить();
    Картинки.Точки.Добавить(Новый ГеографическиеКоординаты(55.06, 37.09));
    Картинки.Картинка = СобственнаяКартинка;
    Картинки.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Картинка;
    Картинки.ПоложениеОпорнойТочки = ПоложениеОпорнойТочкиОтрисовки.Центр;
    ВременнаяСхема = Новый ГеографическаяСхема;
    ВременнаяСхема.ОбластьЛегенды.Элементы.Добавить();
    ВременнаяСхема.ОбластьЛегенды.Элементы.Очистить();
    Сообщить(ВременнаяСхема.ОбластьЛегенды.Элементы.Количество() = 0);
    Сообщить(Легенда.Элементы.Количество() = 1);
    Схема.Обновление = Истина;
    Схема.Показать("Собственная учебная схема — guide-owned-geo");
КонецПроцедуры

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

  1. ОбластьЗаголовка, ОбластьЛегенды, ОбластьПостроения уже принадлежат схеме. Свойства областей можно менять, сами readonly-ссылки не заменяем.

  2. Текст заголовка, фон, рамка и её цвет задаются независимо. Прозрачный и ПрозрачныйФон в справке имеют одинаковое описание; ставим одинаковое значение и не обещаем разные эффекты.

  3. Масштабную линейку отключаем: учебная схема не является расчётом дорожных расстояний.

  4. Элемент легенды содержит серию, образец и подпись. Очистить показан на другой новой схеме, основной образец не уничтожается.

  5. ПолучитьКартинку делает PNG в памяти 32×32 из собственной схемы до назначения этой картинки пунктам. Это растровый снимок, не живая рекурсивная ссылка.

  6. Та же собственная картинка назначается пункту Б, многоточечному объекту и образцу легенды. Для точек режим Картинка включается явно; опора Центр теперь относится к активному режиму.

  7. Никакой PNG на диск не записывается и чужая картинка по URL не загружается. Маленький снимок нужен для демонстрации API, не выдается за хороший картографический значок.

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

  1. Семь проверок ожидаются Истина; в основной легенде один образец, в временной ноль.

  2. В собственном толстом клиенте проверьте заголовок, фон областей и картинки. Статический тест не доказывает точный внешний вид.

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

Показаны реальные области документа, коллекция легенды и картинка как стиль географического объекта.

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

  1. Шрифт Arial должен быть доступен на клиенте; фактическое оформление зависит от среды.

  2. Растровый снимок не меняется автоматически при последующем изменении схемы.

  3. Не использовать рекурсивное создание всё более крупных картинок и не задавать размеры из непроверенного ввода.

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

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

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

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

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