Рассчитать сумму Количество × Цена в списке

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

Вычисляемое поле принадлежит схеме списка. Для расчёта суммы не добавляем реквизит справочника и не записываем данные.

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

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

Подготовка

  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";
    Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
    Сумма = Список.ВычисляемыеПоля.Добавить();
    Сумма.ПутьКДанным = "УчебнаяСумма";
    Сумма.Заголовок = "Сумма, руб.";
    Сумма.Выражение = "Количество * Цена";
    Сумма.ТипЗначения = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2));
    Сумма.Оформление.УстановитьЗначениеПараметра("Формат", "ЧДЦ=2; ЧН=0");
    Сообщить(Список.ВычисляемыеПоля.Найти("УчебнаяСумма") = Сумма);
    Сообщить(Список.ВычисляемыеПоля.Количество() = 1);
    Контроль = Новый Запрос(Список.ТекстЗапроса);
    Данные = Контроль.Выполнить().Выгрузить();
    Сообщить(Данные.Найти(1, "УчебныйНомер").Количество * Данные.Найти(1, "УчебныйНомер").Цена = 750);

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

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

  1. У вычисляемого поля задаём уникальный путь УчебнаяСумма. Это имя понадобится в ПутьКДанным колонки формы.

  2. Выражение использует поля запроса, не переменные модуля формы. Количество и Цена числовые в собственном запросе.

  3. Формат меняет отображение, а не арифметику. Дополнительная проверка исходных данных подтверждает сумму Книги 750.

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

  1. Три проверки дают Истина.

  2. В новой колонке суммы: Книга 750,00; Ручка 30,00; Чай 300,00; Вода 0,00.

  3. В исходном запросе нет колонки УчебнаяСумма: вычисление относится к схеме списка.

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

Наглядная расчётная колонка без изменения структуры базы.

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

  1. ВыражениеПредставления вычисляемого поля не поддерживается в динамическом списке.

  2. Не складывайте строки количества/цены как числа без определения их типа; здесь типы заданы самим запросом.

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

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

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

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

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