Имя: Пароль:
1C
1С v8
Как обратиться к документу в внешней печатной форме (ЗУП 3.1)
0 Vasiliy2018
 
29.01.18
10:03
ЗУП 3.1.4.120


Возникла необходимость перенести печатные формы с 2.5.

Соответственно была создана новая внешняя обработка с реквизитом «СсылкаНаОбъект» с  типом ДокументСсылка.НужныйДокумент.

Перенесет макет.

Оформлена процедура «СведенияОВнешнейОбработке» и все сопутствующее.

Но возникла проблема, обработка не видит «СсылкаНаОбъект», соответственно отрисовывает голый макет без параметров.

Как обратиться к документу?
1 Darych
 
29.01.18
10:04
БСП не той системы
2 Vasiliy2018
 
29.01.18
10:11
(1) Вероятно, но должен же быть реквизит через который можно обратиться к документу вместо "СсылкаНаОбъект", какой-ни будь ТекущийОбъект или что то такое.
3 SleepyHead
 
гуру
29.01.18
10:15
(2) Есть такой реквизит, передается в экспортную процедуру Печать() модуля обработки как МассивОбъектов.
4 SleepyHead
 
гуру
29.01.18
10:35
Вот скелет модуля внешней обработки, выцепил из одной из своих.


Функция СведенияОВнешнейОбработке() Экспорт
    
    Наименование = ПолучитьНаименование();
    Идентификатор = ПолучитьИдентификатор();
    
    Команды = Получить Таблицу Команд();
    ДобавитьКоманду(Команды, Наименование, Идентификатор, "ВызовСерверногоМетода", Ложь, Идентификатор);
    
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначения());
    ПараметрыРегистрации.Вставить("Наименование", Наименование);
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("Информация", Наименование);
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Команды", Команды);
    
    Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьНазначения() Экспорт
Перем Имена, МассивИмен, МассивТипов,Имя;

    Имена = "Отпуск,Увольнение,УвольнениеСписком,Командировка";
    МассивИмен = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Имена,",");
    МассивТипов = Новый Массив;
    Для Каждого Имя из МассивИмен Цикл
        Если МетаДанные.Документы.Найти(Имя)=Неопределено Тогда
            Продолжить
        КонецЕсли;
        МассивТипов.Добавить(Тип("ДокументСсылка."+Имя));
    КонецЦикла;
    Возврат МассивТипов;
КонецФункции

Функция Получить Таблицу Команд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
        
    Возврат Команды;
КонецФункции

Функция ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение, Модификатор)
    НК = ТаблицаКоманд.Добавить();
    НК.Представление = Представление;
    НК.Идентификатор = Идентификатор;
    НК.Использование = Использование;
    НК.ПоказыватьОповещение = ПоказыватьОповещение;
    НК.Модификатор = Модификатор;
    Возврат НК;
КонецФункции

/////////////////////////////////////////////////////////////////////////////
// реализация печати

Функция ПолучитьИдентификатор() Экспорт
    Возврат "ПечатьСреднегоОбщийПоСтатьям"
КонецФункции

Функция ПолучитьНаименование() Экспорт
    Возврат "Расчет среднего по статьям финансирования"
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ПолучитьИдентификатор(), ПолучитьНаименование(), ПечатьСреднего(МассивОбъектов, ОбъектыПечати));
    
КонецПроцедуры

// печать формы Т-53 для ООО Магистр
Функция ПечатьСреднего(МассивОбъектов, ОбъектыПечати)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_"+ПолучитьИдентификатор();
    
    Данные = ПолучитьДанные(МассивОбъектов[0]);
    
    Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    НастройкиСКД = Схема.НастройкиПоУмолчанию;
    
    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("ТЗаработок", Данные.ТЗаработок);
    ВнешниеНаборыДанных.Вставить("ТПремииПолностью", Данные.ТПремииПолностью);
    ВнешниеНаборыДанных.Вставить("ТПремииЧастично", Данные.ТПремииЧастично);
    ВнешниеНаборыДанных.Вставить("ТВремя", Данные.ТВремя);
    ВнешниеНаборыДанных.Вставить("ТИВ", Данные.ТИВ);
    ВнешниеНаборыДанных.Вставить("ТЗ", Данные.ТЗ);
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, НастройкиСКД);
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);    
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);    
    
    Возврат ТабличныйДокумент;
КонецФункции

5 Vasiliy2018
 
29.01.18
11:03
(3) Спасибо, все оказалось действительно очень просто.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.