Добавление колонки итога по документу в динамический список
Клиент попросил добавить итоги по суммовым полям в документы «Расчеты премий».
Раньше я бы менял текст запроса списка, чтобы получить итоги, но теперь появился новый модный способ расчета полей при получении данных списка и я решил им воспользоваться.
Сначала я захотел добавить поля в список программно, но не тут то было:
ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Список.дрп_СуммаПремии", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(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 час.
Отличное решение!
Спасибо.