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

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