Добавление колонки итога по документу в динамический список

Клиент попросил добавить итоги по суммовым полям в документы «Расчеты премий».

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

Сначала я захотел добавить поля в список программно, но не тут то было:

	ДобавляемыеРеквизиты = Новый Массив;
	ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Список.дрп_СуммаПремии", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(17, 2)), , , Истина));
	ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Список.дрп_СуммаПродаж", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(17, 2)), , , Истина));
	ИзменитьРеквизиты(ДобавляемыеРеквизиты);

Посмотрел в конфигураторе, действительно, поля нельзя добавлять:

Пришлось добавить поля при создании документа так, как рекомендовали в статье. Только не понял, почему там выражают Null, а не ноль. Был еще нюанс с тем, что в списке не использовался произвольный запрос, поэтому пришлось использовать целиком свой запрос, где поля вытаскивались звездочкой:

Список.ПроизвольныйЗапрос = истина;
Список.ТекстЗапроса = 
"ВЫБРАТЬ *,
|ВЫРАЗИТЬ (NULL КАК ЧИСЛО (17, 2)) КАК дрп_СуммаПремии, 
|ВЫРАЗИТЬ (NULL КАК ЧИСЛО (17, 2)) КАК дрп_СуммаПродаж 
|ИЗ Документ.РасчетПремийПоЛичнымПродажам"; 


Привязка = Элементы.Ответственный;
Элемент = Элементы.Вставить("дрп_СуммаПремии", Тип("ПолеФормы"), Привязка.Родитель, Привязка);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПутьКДанным = "Список.дрп_СуммаПремии";
Элемент.Заголовок = "Премии";

Привязка = Элементы.Ответственный;
Элемент = Элементы.Вставить("дрп_СуммаПродаж", Тип("ПолеФормы"), Привязка.Родитель, Привязка);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПутьКДанным = "Список.дрп_СуммаПродаж";
Элемент.Заголовок = "Продажи";

Ну и собственно сам код, который подсчитывает:

&НаСервереБезКонтекста
Процедура дрп_СписокПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
	//По аналогии с: https://wonderland.v8.1c.ru/blog/obrabotka-i-oformlenie-dannykh-dinamicheskogo-spiska/
	З = Новый Запрос(
	"ВЫБРАТЬ
	|	СУММА(Т.СуммаПремии) КАК СуммаПремии,
	|	СУММА(Т.СуммаПродаж) КАК СуммаПродаж,
	|	Т.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.РасчетПремийПоЛичнымПродажам.ТаблицаПремий КАК Т
	|ГДЕ
	|	Т.Ссылка В (&Ссылки) 
	|	СГРУППИРОВАТЬ ПО Т.Ссылка"
	);
	З.УстановитьПараметр("Ссылки", Строки.ПолучитьКлючи());
	Выборка = З.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		СтрокаСписка = Строки[Выборка.Ссылка];
		СтрокаСписка.Данные.дрп_СуммаПремии = Выборка.СуммаПремии;
		СтрокаСписка.Данные.дрп_СуммаПродаж = Выборка.СуммаПродаж;
	КонецЦикла;
КонецПроцедуры

В итоге все получилось так, как задумано:

Среда: Розница 2.3.13.30. Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. Катя:

    Отличное решение!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *