1. Разбираемся как работает типовой вариант в карточке номенклатуры (для информации)
Отчет называется "ВедомостьПоТоварамНаСкладах". Заходим в модуль менеджера и видим процедуру, которая добавляет команду для вызова этого отчета из карточки номенклатуры
Далее в справочнике Номенклатура в модуле менеджера в процедуре "ДобавитьКомандыОтчетов" находим вызов этой процедуры, собственно и она и добавляет команду отчета на форму в подменю Отчеты
Также важно обратить внимание на первый скрин и найти КлючВарианта - там задается имя предопределенного варианта отчета в схеме СКД. Т.е зайдя в схему СКД мы увидим такой вариант отчета. Соответственно этот вариант отчета запускается при вызове команды в справочнике Номенклатура.
Параметры, которые передаются при открытии данного варианта отчета находятся в процедуре "ПриСозданииНаСервере" модуля объекта нашего отчета. ИмяКоманды на первом скрине статьи.
2. Добавляем этот отчет в документ "Приобретение товаров и услуг"
Нас почти устраивает вариант отчета, но необходимо в него добавить группировку по номенклатуре, отредактировать заголовок отчета и передать в параметры формирования список товаров а не один товар.
2.1 Отчет "ВедомостьПоТоварамНаСкладах" новый предопределенный вариант отчета
Заимствуем схему СКД в расширение, открываем, переходим на вкладку Настройки и копируем вариант "ПоНоменклатуреКонтекст". Далее новый наш вариант переименовываем как "ПоНоменклатуреДокумента"
Добавляем группировку по номенклатуре.
2.1 Отчет "ВедомостьПоТоварамНаСкладах" модуль менеджера
Добавляем в модуле менеджера в расширении новую экспортную процедуру. Скопирована как по номенклатуре, но изменили наименование процедуры, Представление, ИмяКоманды (поставили всё во множественном числе) и КлючВарианта.
Функция ДобавитьКомандуДвиженияПоСпискуТоваров(КомандыОтчетов) Экспорт
Если ПравоДоступа("Просмотр", Метаданные.Отчеты.ВедомостьПоТоварамНаСкладах) Тогда
КомандаОтчет = КомандыОтчетов.Добавить();
КомандаОтчет.Менеджер = Метаданные.Отчеты.ВедомостьПоТоварамНаСкладах.ПолноеИмя();
КомандаОтчет.Представление = НСтр("ru= 'Движения товаров на складах'");
КомандаОтчет.Важность = "Обычное";
КомандаОтчет.МножественныйВыбор = Ложь;
КомандаОтчет.ДополнительныеПараметры.Вставить("ИмяКоманды", "ДвиженияТоваров");
КомандаОтчет.КлючВарианта = "ПоНоменклатуреДокумента";
Возврат КомандаОтчет;
КонецЕсли;
Возврат Неопределено;
КонецФункции
2.2 Документ "Приобретение товаров и услуг"
В расширение импортируем процедуру "ДобавитьКомандыОтчетов" с аннотацией "&ИзменениеИКонтроль" и добавляем почти в конце вставку кода с вызовом нашей новой процедуры
2.3 Отчет "ВедомостьПоТоварамНаСкладах" модуль объекта
Заимствуем в расширение процедуру "ПриСозданииНаСервере" и делаем вставку нашего кода с параметром, в котором передаем список номенклатуры
&ИзменениеИКонтроль("ПриСозданииНаСервере")
Процедура РасшОПТ_ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка)
Параметры = ЭтаФорма.Параметры;
Если Параметры.Свойство("ПараметрКоманды") Тогда
Если Параметры.Свойство("ОписаниеКоманды")
И Параметры.ОписаниеКоманды.Свойство("ДополнительныеПараметры") Тогда
Если Параметры.ОписаниеКоманды.ДополнительныеПараметры.ИмяКоманды = "ДвиженияТовара" Тогда
ЭтаФорма.ФормаПараметры.Отбор.Вставить("Номенклатура", Параметры.ПараметрКоманды);
ИначеЕсли Параметры.ОписаниеКоманды.ДополнительныеПараметры.ИмяКоманды = "ТоварыВПроцессеОтгрузки" Тогда
СкладДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.ПараметрКоманды, "Склад");
ЭтаФорма.ФормаПараметры.Отбор.Вставить("Склад", СкладДокумента);
ЭтаФорма.ФормаПараметры.Отбор.Вставить("Регистратор", Параметры.ПараметрКоманды);
#Вставка
ИначеЕсли Параметры.ОписаниеКоманды.ДополнительныеПараметры.ИмяКоманды = "ДвиженияТоваров" Тогда
СписокТоваров = Параметры.ПараметрКоманды.Товары.ВыгрузитьКолонку("Номенклатура");
ЭтаФорма.ФормаПараметры.Отбор.Вставить("Номенклатура", СписокТоваров);
#КонецВставки
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ГОТОВО. Запускаемся. Заходим в список Приобретений товаров и услуг -> подменю Отчеты -> Движения товаров на складах -> Результат на скрине.
Вступайте в нашу телеграмм-группу Инфостарт