Добавление колонки суммы в документ «Заказ на перемещение». Розница 3
Клиенту нужно добавить колонку сумм в каждую строку документа «Заказ на перемещение» и видеть общую сумму в подвале.
Добавление колонки делаю по классике, используя заготовки из своих статей:
&НаСервере Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) //Добавляем колонку суммы ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("дор_Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(17, 2)), "Объект.Запасы", "Сумма", Ложь)); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("дор_СуммаИтого", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(17, 2)), "", "Сумма", Ложь)); ИзменитьРеквизиты(ДобавляемыеРеквизиты); Элемент = Элементы.Вставить("дор_Сумма", Тип("ПолеФормы"), Элементы.Запасы, Элементы.ЗапасыЕдиницаИзмерения); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "Объект.Запасы.дор_Сумма"; Элемент.ОтображатьВПодвале = истина; Элемент.Формат = "ЧДЦ=0"; //Элемент.ПутьКДаннымПодвала = "Объект.Запасы.Итогдор_Сумма"; Элемент.ПутьКДаннымПодвала = "дор_СуммаИтого"; Привязка = Элементы.ЗапасыИтогКоличествоСобрано; Элемент = Элементы.Вставить("дор_СуммаИтого", Тип("ПолеФормы"), Привязка.Родитель, Привязка); Элемент.ПутьКДанным = "дор_СуммаИтого"; ЗаполнитьЗначенияСвойств(Элемент, Привязка, "ЦветФона, ЦветТекста, Шрифт, АвтомаксимальнаяШирина, РастягиватьПоГоризонтали, Ширина"); Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право; дор_ЗаполнитьСуммыСтрок(); //Получаем суммы Элементы.ЗапасыИтогКоличествоСобрано.Видимость = ложь; КонецПроцедуры &НаСервере Процедура дор_ЗаполнитьСуммыСтрок(ИдентификаторСтроки = Неопределено) Экспорт ТЗ = Объект.Запасы.Выгрузить(, "НомерСтроки, Номенклатура, Количество"); З = Новый Запрос(); З.Текст = "ВЫБРАТЬ | Т.НомерСтроки КАК НомерСтроки, | Т.Номенклатура КАК Номенклатура, Т.Количество |ПОМЕСТИТЬ ТН |ИЗ | &ТЗ КАК Т |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТН.НомерСтроки КАК НомерСтроки, | ЕСТЬnull(Т.Цена, 0) КАК Цена, ТН.Количество |ИЗ | ТН КАК ТН | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦен = &ВидЦен) КАК Т | ПО ТН.Номенклатура = Т.Номенклатура"; З.УстановитьПараметр("Дата", ТекущаяДата()); З.УстановитьПараметр("ТЗ", ТЗ); З.УстановитьПараметр("ВидЦен", Объект.СтруктурнаяЕдиницаПолучатель.РозничныйВидЦен); ЭтаФорма.дор_СуммаИтого = 0; Выборка = З.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Цена = Выборка.Цена; Сумма = Выборка.Цена * Выборка.Количество; Объект.Запасы[Выборка.НомерСтроки - 1].дор_Сумма = Сумма; ЭтаФорма.дор_СуммаИтого = ЭтаФорма.дор_СуммаИтого + Сумма; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура дор_ПослеЗаписиПосле(ПараметрыЗаписи) дор_ЗаполнитьСуммыСтрок(); //Получаем суммы КонецПроцедуры &НаКлиенте &После("РассчитатьОбъемИВесВДокументе") Процедура дор_РассчитатьОбъемИВесВДокументе() дор_ЗаполнитьСуммыСтрок(); //Получаем суммы КонецПроцедуры
Нюанс, в каком событии пересчитывать суммы строк. К счастью, в документе есть событие РассчитатьОбъемИВесВДокументе.
В путь подвала не захотело устанавливаться выражение с Итог. Пришлось рассчитывать сумму итога самому.
Подвал табличной части не показывается. Ради одной строки выводить его не хочется, поэтому добавил поле итога по сумме.
Итоговая форма выглядит так:

Мне так и не удалось выровнять сумму вправо, чтобы было наравне с количеством, кстати.
При таком подходе сумма не сохраняется, а всякий раз вычисляется на лету.
Среда: Розница 3.0.12.237. Объем: 1 час
