Добавление колонки остатка в заказ клиента

Клиенту понадобилось в заказе клиента видеть остаток по каждой позиции при работе с документом заказа.

Добавил форму в расширении и там прописал код:

&НаСервере
Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
   
НовыеКолонки = Новый Массив;
   
НовыеКолонки.Добавить(Новый РеквизитФормы(«дор_Остаток», Новый ОписаниеТипов(«Число», Новый КвалификаторыЧисла(10, 2)), «Объект.Товары», «Остаток»));
   
ИзменитьРеквизиты(НовыеКолонки); // ключевая процедура, которая добавляет ревизиты

    Элемент = Элементы.Вставить(«дор_Остаток», Тип(«ПолеФормы»), Элементы.Товары, Элементы.ТоварыКоличествоУпаковок);
   
Элемент.Вид = ВидПоляФормы.ПолеВвода;
   
Элемент.ПутьКДанным = «Объект.Товары.дор_Остаток»;
   
//Элемент.Заголовок = «Остаток»;

    дор_ПолучитьОстатки(); //Получаем остатки
КонецПроцедуры

&НаСервере
Процедура дор_ПолучитьОстатки(ИдентификаторСтроки = Неопределено) Экспорт
   
ТЗ = Объект.Товары.Выгрузить(, «НомерСтроки, Номенклатура»);
   
З = Новый Запрос();
   
З.Текст =
   
«ВЫБРАТЬ
    |   Т.НомерСтроки КАК НомерСтроки,
    |   Т.Номенклатура КАК Номенклатура
    |ПОМЕСТИТЬ ТН
    |ИЗ
    |   &ТЗ КАК Т
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ТН.НомерСтроки КАК НомерСтроки,
    |   Т.ВНаличииОстаток КАК Остаток
    |ИЗ
    |   ТН КАК ТН
    |       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, ) КАК Т
    |       ПО ТН.Номенклатура = Т.Номенклатура»
;
   
З.УстановитьПараметр(«Дата», ТекущаяДата());
   
З.УстановитьПараметр(«ТЗ», ТЗ);

    Выборка = З.Выполнить().Выбрать();
    Пока
Выборка.Следующий() Цикл
       
Остаток = Выборка.Остаток;
       
Объект.Товары[Выборка.НомерСтроки 1].дор_Остаток = Остаток;
    КонецЦикла;

КонецПроцедуры

&НаКлиенте
Процедура дор_ТоварыПриИзмененииПосле(Элемент)
   
дор_ПолучитьОстатки();
КонецПроцедуры

Как видно из кода, остатки пересчитываются по всем позициям товарного состава документов и заносятся в строки табличной части.

При этом реквизит добавляется программно. Расширение, конечно, позволяет добавлять реквизиты интерактивно, но я все же приверженец old-school.

Процедура дор_ТоварыПриИзмененииПосле — это обработчик события ПриИзменении табличной части Товары. Позволяет отловить измненения в табличной части и пересчитать остатки.

Результат выглядит так:

Аналогичным способом можно вывести остаток и в любой произвольный документ УТ, например, в «Заказ поставщику».