В данном примере я покажу свое решение вот такой задачи - необходимо создать внешний отчет, который будет открываться из документа "Расходная накладная", в качестве параметра в отчет передается ссылка на документ, в отчете необходимо видеть информацию из самого документа (артикул, номенклатура, количество в документе) и информацию по остаткам номенклатуры ( остаток на складе списания, остатки на всех складах и итоги по всем складам). Данные по остаткам необходимо получать на дату документа (Граница.Исключая).
1. Создаем внешний отчет, в свойствах обязательно указываем "Хранилище вариантов отчетов" и в модуле объекта прописываем необходимые функции и процедуры для регистрации внешнего отчета:
Функция СведенияОВнешнейОбработке() Экспорт
НаименованиеОтчета="Анализ по остаткам";
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив();
МассивНазначений.Добавить("Документ.РасходнаяНакладная"); // указываем вид документа
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Вид", "Отчет");
ПараметрыРегистрации.Вставить("ОпределитьНастройкиФормы","Истина");
ПараметрыРегистрации.Вставить("Наименование", НаименованиеОтчета);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Информация", НаименованиеОтчета);
ПараметрыРегистрации.Вставить("ВерсияБСП", "3.1.7.235");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
НаименованиеОтчета,
"1",
"ОткрытиеФормы",
Ложь,"");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
2. Здесь же, в модуле объекта внешнего отчета, прописываем процедуру определения настройки формы:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
Настройки.ФормироватьСразу = Истина;
Настройки.РазрешеноИзменятьВарианты = Истина;
Настройки.События.ПриСозданииНаСервере = Истина;
КонецПроцедуры
3. В экспортной процедуре "ПриСозданииНаСервере" получим ссылку на документ и передадим ее в параметр "Ссылка" в СКД. Так как данные по остаткам нам нужны на дату документа (Граница.Исключая), в этой же процедуре в параметр "Период" в СКД передадим необходимое значение:
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
ОбъектыНазначения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Форма.Параметры, "ОбъектыНазначения");
Документ = ОбъектыНазначения[0]; //Получаем ссылку на документ
Если ОбъектыНазначения <> Неопределено Тогда
Форма.ФормаПараметры.Отбор.Вставить("Ссылка", Документ);
//Данные по остаткам будем получать на дату документа, Граница.Исключая
Граница = Новый Граница(Документ.Дата, ВидГраницы.Исключая);
Форма.ФормаПараметры.Отбор.Вставить("Период", Граница);
КонецЕсли;
КонецПроцедуры
4. Создаем вычисляемое поле "Разница", рассчитываем по формуле: ОстатокНаСкладеСписания - КоличествоВДокументе (по всем настройкам в СКД смотрим скриншоты).
5. Указываем ресурсы и на закладке "Параметры" делаем необходимые настройки.
6. В настройках СКД создаем таблицу, в качестве строки укажем группировку по полю "Номенклатура", в выбранных полях группировки сгруппируем поля "Номенклатура" и "Артикул", для того чтобы эти поля находились в разных колонках.
7. В колонки таблицы добавим необходимые группировки и настроим условное оформление.
Проверено на следующих конфигурациях и релизах:
- Управление нашей фирмой, редакция 3.0, релизы 3.0.1.282