Осуществляет поиск объекта по указанному тексту.
Синтаксис
Найти(<Текст>)Полное описание, параметры и ограничения
СлоиГеографическойСхемы.Найти (GeographicalSchemaLayers.Find)
СлоиГеографическойСхемы (GeographicalSchemaLayers)
Найти (Find)
Доступен, начиная с версии 8.0.
Синтаксис:
Найти(<Текст>)
Параметры:
<Текст> (обязательный)
Тип: Строка.
Текст, по которому будет искаться слой в коллекции.
Возвращаемое значение:
Тип: СлойГеографическойСхемы, Неопределено.
Если не найден, возвращается Неопределено.
Описание:
Осуществляет поиск объекта по указанному тексту.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Сохранить схему в память и прочитать независимый документ
Записываем только новую собственную геометрию в поток, возвращаем позицию к началу и читаем во второй документ; файлы не используются.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Собственная учебная база 8.5.1.1343, толстый клиент Windows. ГеографическаяСхема из этого урока недоступна в тонком/веб-клиенте: не вставляйте код в тонкий клиент.
Создайте отдельную внешнюю обработку с управляемой формой, командой Выполнить и кнопкой этой команды. Вставьте весь код одного урока в модуль формы; назначьте команде обработчик Выполнить.
Каждый запуск создаёт новую схему в локальной переменной. Реквизиты карты и макеты не нужны; готовые карты, SHP, GPS и сервисы карт не загружаются.
Точки и зоны вымышленные учебные объекты. Координаты заданы в градусах, высота в метрах; это не местоположение пользователей или реальных заказов.
На схеме нет подложки с границами стран/дорогами. Это собственная геометрия, а не полноценный навигатор. Показать открывает отдельное окно схемы.
Запускайте уроки по одному. Статические проверки сверяют 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);
Поток = Новый ПотокВПамяти;
ОшибкаОперации = "";
Попытка
Схема.Записать(Поток);
Сообщить(Поток.Размер() > 0);
Поток.Перейти(0, ПозицияВПотоке.Начало);
Копия = Новый ГеографическаяСхема;
Копия.Прочитать(Поток);
Сообщить(Копия.Слои.Количество() = 1);
КопияПунктов = Копия.Слои.Найти("Учебные пункты");
Если КопияПунктов = Неопределено Тогда
ВызватьИсключение "После чтения не найден собственный учебный слой";
КонецЕсли;
Сообщить(КопияПунктов.Объекты.Количество() = 2);
Сообщить(КопияПунктов.НайтиПоЗначению("guide-point-A").Координаты.Широта = 55);
Копия.Очистить();
Сообщить(Копия.Слои.Количество() = 0);
Сообщить(Схема.Слои.Количество() = 1);
Сообщить(Пункты.Объекты.Количество() = 2);
Копия.Вывести(Схема);
Сообщить(Копия.Слои.Количество());
Копия.Показать("Учебная копия после Вывести");
ВременнаяСхема = Новый ГеографическаяСхема;
ВременныйСлой = ВременнаяСхема.Слои.Добавить("УчебныйВременный", Тип("ТочечныйОбъектГеографическойСхемы"));
ВременныйСлой.Объекты.Добавить();
ВременныйСлой.Объекты.Очистить();
Сообщить(ВременныйСлой.Объекты.Количество() = 0);
ВременнаяСхема.Слои.Очистить();
Сообщить(ВременнаяСхема.Слои.Количество() = 0);
Исключение
ОшибкаОперации = ОписаниеОшибки();
КонецПопытки;
ОшибкаЗакрытия = "";
Попытка
Поток.Закрыть();
Исключение
ОшибкаЗакрытия = ОписаниеОшибки();
КонецПопытки;
Если Не ПустаяСтрока(ОшибкаОперации) Или Не ПустаяСтрока(ОшибкаЗакрытия) Тогда
ВызватьИсключение СтрШаблон("Операция: %1; закрытие собственного потока: %2", ОшибкаОперации, ОшибкаЗакрытия);
КонецЕсли;
Схема.Обновление = Истина;
Схема.Показать("Собственная учебная схема — guide-owned-geo");
КонецПроцедурыРазбор по шагам
ПотокВПамяти создан самим уроком. Записать выбирает перегрузку для потока, не трактует строку как путь к файлу.
После записи позиция находится после данных; Перейти(0, Начало) обязателен до Прочитать.
Второй документ получает сериализованное содержимое. Проверяем собственные ключи/координаты, затем очищаем только этот документ и убеждаемся, что исходный остался.
Вывести передаёт собственную исходную схему в новый пустой документ. Число слоёв после этой операции выводится диагностически; не подменяем эту операцию оператором присваивания.
Очистить объектов и слоёв отдельно демонстрируется на третьей временной схеме; рабочей карты среди аргументов нет.
Закрытие потока предпринимается и после ошибки операции. Ошибка закрытия не проглатывается; две причины сохраняются отдельно. Сеть и файловая система не используются.
Как проверить результат
Девять булевых проверок ожидаются Истина; дополнительное число — фактическое количество слоёв после Вывести.
Исходные два пункта не исчезли после Очистить копии. В конце собственный поток закрывается, в случае сбоя показано исключение.
Ожидаемый результат
Показан полноценный обмен географическим документом через память с независимым чтением и очисткой.
На что обратить внимание
Чтение с текущей конечной позиции потока не заменяет переход к нулю.
Не загружать произвольный недоверенный поток без ограничения размера: здесь источник только собственная маленькая схема.
Записать схемы в память не означает сохранение карты на диске.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Построить два собственных пункта на пустой географической схеме
Создаём слой точечных объектов, задаём координаты и идентификаторы; проверяем поиск и ограничивающий прямоугольник.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Собственная учебная база 8.5.1.1343, толстый клиент Windows. ГеографическаяСхема из этого урока недоступна в тонком/веб-клиенте: не вставляйте код в тонкий клиент.
Создайте отдельную внешнюю обработку с управляемой формой, командой Выполнить и кнопкой этой команды. Вставьте весь код одного урока в модуль формы; назначьте команде обработчик Выполнить.
Каждый запуск создаёт новую схему в локальной переменной. Реквизиты карты и макеты не нужны; готовые карты, SHP, GPS и сервисы карт не загружаются.
Точки и зоны вымышленные учебные объекты. Координаты заданы в градусах, высота в метрах; это не местоположение пользователей или реальных заказов.
На схеме нет подложки с границами стран/дорогами. Это собственная геометрия, а не полноценный навигатор. Показать открывает отдельное окно схемы.
Запускайте уроки по одному. Статические проверки сверяют 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);
Сообщить(Схема.Слои.Количество() = 1);
Сообщить(Пункты.Имя = "УчебныеПункты");
Сообщить(Пункты.ТипОбъектов = Тип("ТочечныйОбъектГеографическойСхемы"));
Сообщить(Схема.Слои.Индекс(Пункты) = 0);
Сообщить(Схема.Слои.Получить(0) = Пункты);
Сообщить(Схема.Слои.Найти("Учебные пункты") = Пункты);
Сообщить(Пункты.Объекты.Количество() = 2);
Сообщить(Пункты.Объекты.Получить(0).Значение = "guide-point-A");
Сообщить(Пункты.НайтиПоЗначению("guide-point-B") = ПунктБ);
Сообщить(Пункты.НайтиПоЗначению("guide-missing") = Неопределено);
Сообщить(ПунктА.Координаты.Широта = 55);
Сообщить(ПунктА.Координаты.Долгота = 37);
Сообщить(ПунктА.Координаты.Высота = 100);
Сообщить(ПунктА.Слой = Пункты);
Границы = Пункты.ОграничивающийПрямоугольник;
Сообщить(Границы.ШиротаЮжнойГраницы <= 55 И Границы.ШиротаСевернойГраницы >= 55.1);
Сообщить(Границы.ДолготаЗападнойГраницы <= 37 И Границы.ДолготаВосточнойГраницы >= 37.2);
Сообщить(ТипЗнч(ПунктА.ОграничивающийПрямоугольник) = Тип("ПрямоугольникГеографическойСхемы"));
Сообщить(ТипЗнч(Схема.ОграничивающийПрямоугольник) = Тип("ПрямоугольникГеографическойСхемы"));
Схема.Обновление = Истина;
Схема.Показать("Собственная учебная схема — guide-owned-geo");
КонецПроцедурыРазбор по шагам
Конструктор координат принимает сначала широту, затем долготу, затем необязательную высоту. Градусы не являются метрами расстояния.
Тип объектов задаётся при Добавить слоя; Добавить объекта принимает ноль аргументов, а Координаты устанавливаются отдельно.
Имя слоя служебное, Текст — его подпись. Согласно описанию коллекции Слои.Найти ищет по тексту, поэтому передана подпись Учебные пункты.
Значение — собственный устойчивый ключ пункта. НайтиПоЗначению не ищет подсказку и не запрашивает адрес через интернет.
ОграничивающийПрямоугольник рассчитывается по объектам; его поля только для чтения. Проверяем, что он охватывает оба пункта.
На время построения обновление отключено, затем включено перед показом; это касается отрисовки, не записи базы.
Как проверить результат
Восемнадцать булевых проверок ожидаются Истина; покажутся два маркера без картографической подложки.
Наведите курсор на пункт А: подсказка поясняет учебный характер. Файлы и сеть не использованы.
Ожидаемый результат
Есть законченная небольшая схема с настоящими слоями, объектами, координатами и поиском.
На что обратить внимание
Не выдавать эту геометрию за карту дорог или навигационный маршрут.
Перестановка широты/долготы может дать допустимые, но неверные координаты.
Прямоугольник не создаётся через Новый и не заполняется присваиванием readonly-полей.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.