Показать картинку множественных значений по числовому индексу

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

Две строки собственных меток хранят отдельные значение, подпись и индекс картинки. Индекс 0 обращается к реальной первой картинке своего библиотечного ресурса, не к номеру строки формы.

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

Полный модуль своей управляемой формы в новой конфигурации УчебныйВыборВвода85. Настольный тонкий клиент Windows; типовые данные и проверка ссылок читаются на сервере. Запуск в 1С не проверен.

Подготовка

  1. Создайте с нуля отдельную конфигурацию УчебныйВыборВвода85: управляемое приложение, Такси, язык Русский, платформа 8.5.1.1343, без расширений, общих реквизитов-разделителей и прикладных обработчиков. Не используйте рабочую базу.

  2. Создайте иерархический справочник УчебныеКниги85, иерархия групп и элементов, код Строка длиной 10 без автонумерации, наименование Строка 100. Добавьте реквизиты МеткаСтенда (Строка 30, для группы и элемента) и Секция (Строка 30, для элемента).

  3. В своём новом стенде вручную заведите группы BOOKGROUP/Книги и PENGROUP/Канцелярия. В первой группе заведите BOOK/Книга и ALBUM/Альбом с Секция = Книги, во второй PEN/Ручка с Секция = Канцелярия. У всех этих собственных записей МеткаСтенда = owned-input85. Других записей не создавайте.

  4. Каждый урок — отдельная новая управляемая форма внешней обработки. Назначьте ПриСозданииНаСервере, вставьте полный модуль. Реквизиты, поле и учебную команду код создаёт сам: вручную одноимённые элементы не добавляйте.

  5. После F7 обновите только собственную конфигурацию. Запускайте настольный тонкий клиент Windows. Уроки не выполнялись: runtimeVerifiedScenarios=0, фактическое отображение и стандартный выбор ещё требуют отдельного ручного теста.

  6. Будущий ручной опыт читает только свои подготовленные записи и меняет данные формы в памяти. Код не создаёт, не записывает и не удаляет объекты базы или файлы, не вызывает внешнюю сеть, печать или привилегированный режим.

  7. Коды BOOK, ALBUM, PEN и метка owned-input85 — конкретные значения подготовленного собственного стенда, не имена товаров вашей конфигурации. Если подготовка не совпала, исправляйте только свой стенд, не отключайте защиту для production.

  8. Для этого урока импортируйте собственный owned-book-marker-32.png из lesson-assets руководства в Общие → Общие картинки → УчебныйМаркер. PNG содержит одну картинку 32×32, а не два булевых значка.

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

    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Проверить свой выбор";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Если Метки.Количество() <> 2 Тогда
        ВызватьИсключение "Ожидались две собственные строки меток";
    КонецЕсли;
    Книга = Метки[0];
    Ручка = Метки[1];
    Сообщить(Книга.Значение = "book" И Книга.Представление = "Книга");
    Сообщить(Ручка.Значение = "pen" И Ручка.Представление = "Ручка");
    Сообщить(Книга.ИндексКартинки = 0 И Ручка.ИндексКартинки = 0);
    Сообщить("Числовой индекс 0 выбирает первую картинку собственного ресурса, а не строку меток");
КонецПроцедуры

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

  1. Свой PNG импортирован в общую картинку УчебныйМаркер. Она существует до начала урока, код не создаёт ресурс по одному имени и не скачивает изображение.

  2. Сервер создаёт настоящую таблицу Значение/Представление/ИндексКартинки и переносит её в реквизит формы. Клиент видит ДанныеФормыКоллекция.

  3. Все три пути множественных значений указывают на реально созданные колонки и присваиваются на сервере.

  4. ИндексКартинки имеет тип Число. Поэтому КартинкаМножественныхЗначений предоставляет набор, в котором 0 обозначает первую собственную картинку.

  5. У собственного ресурса одна картинка. Обе метки получают индекс 0; индекс 1 и вторую картинку урок не выдумывает.

  6. Расширенное редактирование и гиперссылки выключены. Команда проверяет две реальные строки и индексы, не изменяя значения или библиотечный ресурс.

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

  1. Три Истина и пояснение индекса. В поле видны подписи Книга и Ручка, не строковые коды book/pen.

  2. Фактические обе картинки проверьте в своей теме. Числовое равенство не доказывает, что клиент их уже отрисовал.

  3. Количество строк и собственные значения остаются прежними; ни один PNG не изменяется.

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

Использован реальный числовой источник картинки с одним допустимым библиотечным элементом и отдельной проверкой данных меток.

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

  1. Числовой индекс картинки не является идентификатором или индексом строки формы.

  2. Для булевой колонки Истина использует индекс 0, Ложь — 1: чтобы показать оба состояния, понадобится реальный набор из двух картинок. Этот ресурс не выдаётся за такой набор.

  3. Не присваивайте здесь случайную двоичную картинку вместо подготовленного библиотечного набора.

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

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

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

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

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