Связать с пунктами учебные количества и найти пункт по серии

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

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

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

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

Подготовка

  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);
    Количество = Пункты.Серии.Добавить("УчебноеКоличество");
    Количество.Значение = "guide-series-quantity";
    Количество.Текст = "Количество учебных наборов";
    Количество.ИмяГруппыСерий = "УчебныеПоказатели";
    Количество.ТипОтображения = ТипОтображенияСерииСлояГеографическойСхемы.Текст;
    Количество.Формат = "ЧДЦ=0";
    Количество.ОриентацияТекста = 0;
    Количество.РежимОтображенияЗначений = РежимОтображенияЗначенийСерии.ОтображатьКакЗначение;
    Количество.БазовыйЦветФигуры = Новый Цвет(50, 120, 185);
    Количество.ЦветТекста = Новый Цвет(25, 45, 65);
    Количество.ШрифтТекста = Новый Шрифт("Arial", 10);
    Пункты.УстановитьЗначение(ПунктА, Количество, 3, "Три вымышленных набора", "guide-value-A");
    Пункты.УстановитьЗначение(ПунктБ, Количество, 1, "Один вымышленный набор", "guide-value-B");
    ПунктА.ОтображатьДанные = Истина;
    ПунктБ.ОтображатьДанные = Истина;
    Сообщить(Количество.Имя = "УчебноеКоличество");
    Сообщить(Пункты.Серии.Количество() = 1);
    Сообщить(Пункты.Серии.Получить(0) = Количество);
    Сообщить(Пункты.Серии.Найти("УчебноеКоличество") = Количество);
    ЗначениеА = Пункты.ПолучитьЗначение(ПунктА, Количество);
    Сообщить(ЗначениеА.Значение = 3);
    Сообщить(ЗначениеА.Объект = ПунктА);
    Сообщить(ЗначениеА.Подсказка = "Три вымышленных набора");
    Сообщить(ЗначениеА.Расшифровка = "guide-value-A");
    Сообщить(ЗначениеА.Серия <> Неопределено);
    Сообщить(Пункты.НайтиОбъект(Количество, 3) = ПунктА);
    Отобранные = Пункты.ВыбратьОбъекты(Новый Структура("УчебноеКоличество", 3));
    Сообщить(Отобранные.Количество() = 1);
    Если Отобранные.Количество() <> 1 Тогда
        ВызватьИсключение "Учебный отбор не дал ровно один пункт";
    КонецЕсли;
    Сообщить(Отобранные.Получить(0) = ПунктА);
    ВременнаяСерия = Пункты.Серии.Добавить("УчебнаяВременная");
    Пункты.Серии.Удалить(ВременнаяСерия);
    ВременныйСлой = Схема.Слои.Добавить("УчебныйВременный", Тип("ТочечныйОбъектГеографическойСхемы"));
    ВременныйСлой.Серии.Добавить("УчебнаяЧерновая");
    ВременныйСлой.Серии.Очистить();
    Схема.Слои.Удалить(ВременныйСлой);
    Схема.Обновление = Истина;
    Схема.Показать("Собственная учебная схема — guide-owned-geo");
КонецПроцедуры

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

  1. Значение пункта guide-point-A идентифицирует геометрию. Значение серии guide-series-quantity идентифицирует показатель. Число 3 — значение этого показателя для конкретного пункта.

  2. УстановитьЗначение получает объект, серию, число, подсказку и расшифровку. ПолучитьЗначение возвращает объект ЗначениеСерииСлояГеографическойСхемы, не голое число.

  3. Чтобы число отображалось, включаем ОтображатьДанные у пунктов и выбираем Текст для серии. Формат ЧДЦ=0 исключает дробную часть.

  4. Цвет фигуры и РежимОтображенияЗначений относятся к графическим представлениям; при Текст не обещаем влияние этих настроек на фигуру/долю.

  5. Серии.Найти ищет имя серии. ВыбратьОбъекты принимает структуру имя серии → искомое значение; поиск по серии не заменяет НайтиПоЗначению геометрии.

  6. Тип свойства ЗначениеА.Серия в справке описан противоречиво: имя типа коллекции, описание самой серии. Не присваиваем его и не придумываем жёсткое сравнение типа.

  7. Временная серия и отдельный временный слой удалены из собственного документа; основное количество не очищается.

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

  1. Двенадцать проверок ожидаются Истина; отбор количества 3 вернул пункт А.

  2. После показа у собственных пунктов должны быть подписи 3 и 1. Рабочие остатки/заказы не читались.

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

Реальные API серии и отбора объяснены на полностью заполненных собственных данных.

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

  1. Не получать искомое число напрямую из ПунктА.Значение: там код объекта, а не количество.

  2. Если несколько пунктов имеют одно число, НайтиОбъект не заменяет массив результатов ВыбратьОбъекты.

  3. Описание серии не исполняется как SQL запрос и не обновляет остатки.

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

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

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

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

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