Показать четыре учебных товара без справочника и без записи

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

Динамический список получает строки из запроса. Задаём собственное уникальное числовое поле ключа, не путая его с индексом строки на экране.

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

Модуль собственной управляемой формы внешней обработки. Вставляйте готовые процедуры с директивами на уровне модуля; каждый урок — в отдельной копии формы.

Подготовка

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

  2. В реквизитах формы добавьте Список типа ДинамическийСписок. Создайте один элемент ТаблицаФормы с именем ТаблицаТоваров и путём к данным Список. Колонки вручную не добавляйте: их создаёт код. Это не ТаблицаЗначений и не коллекция строк для Добавить().

  3. В событиях формы назначьте ПриСозданииНаСервере одноимённой процедуре из примера. Не используйте одновременно другой обработчик заполнения этого списка.

  4. При открытии код задаёт произвольный запрос из четырёх константных строк. Основная таблица не указана; таблицы базы, файлы и внешние сервисы не используются. Запись данных отсутствует.

  5. Каждый раз открывайте отдельную копию формы. Автоматическое сохранение настроек отключено: старый пользовательский отбор не должен вмешиваться в упражнение.

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

    Список.ПоляКлюча = Новый ФиксированныйМассив(КлючевыеПоля);
    Список.ТекстЗапроса = "ВЫБРАТЬ
|    1 КАК УчебныйНомер,
|    ""Книга"" КАК Наименование,
|    ""Канцелярия"" КАК Категория,
|    3 КАК Количество,
|    250 КАК Цена
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 2, ""Ручка"", ""Канцелярия"", 1, 30
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 3, ""Чай"", ""Продукты"", 2, 150
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 4, ""Вода"", ""Продукты"", 0, 70";
    Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
    Контроль = Новый Запрос(Список.ТекстЗапроса);
    Данные = Контроль.Выполнить().Выгрузить();
    Ключи = Новый Соответствие;
    Для Каждого Товар Из Данные Цикл
        Если Ключи.Получить(Товар.УчебныйНомер) <> Неопределено Тогда
            ВызватьИсключение "УчебныйНомер должен быть уникален";
        КонецЕсли;
        Ключи.Вставить(Товар.УчебныйНомер, Истина);
    КонецЦикла;
    Сообщить(Данные.Количество() = 4);
    Сообщить(Ключи.Количество() = 4);
    Сообщить(Список.ПоляКлюча.Количество() = 1);
    Сообщить(Список.ПоляКлюча.Получить(0) = "УчебныйНомер");
    Сообщить(Список.ВидКлюча = ВидКлючаДинамическогоСписка.ЗначениеПоля);

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

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

  1. ОсновнаяТаблица пустая: запрос не привязан к каталогу или документам. В объединении четыре собственные строки, у каждой явный непустой уникальный ключ.

  2. ПоляКлюча — фиксированный массив: создаём обычный массив, затем присваиваем его неизменяемую копию. ЗначениеПоля подходит одному полю ключа.

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

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

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

  1. Пять проверок в сообщениях дают Истина.

  2. В таблице четыре товара: Книга 3×250, Ручка 1×30, Чай 2×150, Вода 0×70. Порядок без явной сортировки не проверяйте.

  3. Запрос не содержит имён таблиц конфигурации; закрытие формы не создаёт товары в базе.

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

Один воспроизводимый список с ключами 1–4 и собственным набором данных.

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

  1. Ключ — не номер позиции после сортировки. Не используйте два одинаковых ключа и Неопределено.

  2. При указанной основной таблице разрешён только ВидКлюча Авто; показанный режим без основной таблицы нельзя механически переносить в типовой список.

  3. В запросе списка с ключевыми полями нельзя задавать УПОРЯДОЧИТЬ ПО: используйте Порядок динамического списка.

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

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

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

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

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