Хотя апологеты самодокументированных программ категорически не рекомендовали передавать в процедуры параметры-ссылки, все же иногда хочется. 1С вообще считает, что по умолчанию параметр процедуры должен быть ссылкой.
Но как быть, если требуемый функционал должен реализоваваться внешним отчетом? И таких отчетов требуется вагон и маленькая тележка? Формировать список значений параметров, передавать его, получать значения из списка и загонять в параметры – это обычный метод. Вот и нарисуем соответствующую процедуру для глобального модуля…
Процедура глОтчетСоСсылками(пФайл, СписПар="", пКолСсылок=0, п1="", п2="", п3="") Экспорт
Перем лИмя;
Если ПустаяСтрока(пФайл) = 1 Тогда
Сообщить("Не задано имя файла отчета!");
Возврат;
КонецЕсли;
Если ФС.СуществуетФайл(пФайл) = 0 Тогда
Сообщить("Не найден файл "+пФайл+" !");
Возврат;
КонецЕсли;
Если ПустоеЗначение(СписПар) = 1 Тогда
СписПар = СоздатьОбъект("СписокЗначений");
КонецЕсли;
Если пКолСсылок > 0 Тогда
СписПар.ВставитьЗначение(1,п1);
КонецЕсли;
Если пКолСсылок > 1 Тогда
СписПар.ВставитьЗначение(2,п2);
КонецЕсли;
Если пКолСсылок > 2 Тогда
СписПар.ВставитьЗначение(3,п3);
КонецЕсли;
ОткрытьФормуМодально("Отчет", СписПар, пФайл);
Если пКолСсылок > 0 Тогда
п1 = СписПар.ПолучитьЗначение(1,лИмя);
КонецЕсли;
Если пКолСсылок > 1 Тогда
п2 = СписПар.ПолучитьЗначение(2,лИмя);
КонецЕсли;
Если пКолСсылок > 2 Тогда
п3 = СписПар.ПолучитьЗначение(3,лИмя);
КонецЕсли;
КонецПроцедуры
Теперь осталось лишь позаботиться о том, чтобы внешний отчет корректно вычислял требуемые величины параметров и заносил их в список в нужные позиции.
P.S. Достал меня Владимир. И в самом деле, количество параметров-ссылок вовсе не обязано быть аргументом - если внешнему отчету оно потребуется, его можно передать и по-другому. Но список значений я все же оставлю, ибо не только ссылки, как правило, должны передаваться в отчет...
Итак:
Процедура глОтчетСоСсылками(пФайл, СписПар="", п1="", п2="", п3="") Экспорт
Перем лИмя;
Если ПустаяСтрока(пФайл) = 1 Тогда
Сообщить("Не задано имя файла отчета!");
Возврат;
КонецЕсли;
Если ФС.СуществуетФайл(пФайл) = 0 Тогда
Сообщить("Не найден файл "+пФайл+" !");
Возврат;
КонецЕсли;
Если ПустоеЗначение(СписПар) = 1 Тогда
СписПар = СоздатьОбъект("СписокЗначений");
КонецЕсли;
СписПар.ВставитьЗначение(1,п1);
СписПар.ВставитьЗначение(2,п2);
СписПар.ВставитьЗначение(3,п3);
ОткрытьФормуМодально("Отчет", СписПар, пФайл);
п1 = СписПар.ПолучитьЗначение(1,лИмя);
п2 = СписПар.ПолучитьЗначение(2,лИмя);
п3 = СписПар.ПолучитьЗначение(3,лИмя);
КонецПроцедуры