Имя: Пароль:
1C
 
Внешняя печатная форма на упр. формах (конф. БСП)
0 nemoxp
 
20.08.15
09:08
На базе БСП (одна из последних версий) пишу свою конфигурацию. Столкнулся с проблемой создания печатных форм. Создал свой документ. Обновил справочник "Идентификатор объектов метаданных". Написал внешнюю печатную форму к нему. Без проблем ее зарегистрировал. Галки показывать печать в списке и в доке стоят, а кнопки "печать" нет. Добавил кнопку печати с командой "ОбщаяКоманда.ДополнительныеОтчетыИОбработкиПечатныеФормы". На нажатие кнопки открывается окно со списком внешних печатных форм, выбираю мою и ошибка: "{ВнешняяОбработка.ПечатьCMR.МодульОбъекта(48)}: Индекс находится за границами массива
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьCMR", "Печать CMR", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати));".

Вот код моей печатной формы:

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

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

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

КонецПроцедуры

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

Функция СформироватьПечатнуюФорму(СсылкаНаОбъект, ОбъектыПечати)
        
    ТабличныйДокумент     = новый ТабличныйДокумент;    
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РелизОрдер_ПечатьCMR";
    Макет = ПолучитьМакет("CMR");
    
    ОбластьШапка         = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока         = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрокаДоп    = Макет.ПолучитьОбласть("СтрокаДоп");
    ОбластьПодвал         = Макет.ПолучитьОбласть("Подвал");

//...............................................................

    ТабличныйДокумент.Вывести(ОбластьШапка);
    ТабличныйДокумент.Вывести(ОбластьСтрока);
    ТабличныйДокумент.Вывести(ОбластьСтрокаДоп);
    ТабличныйДокумент.Вывести(ОбластьПодвал);
    
    Возврат ТабличныйДокумент;

КонецФункции


Плюнул, решил встроить ее в документ, но все равно ничего не работает...
Как я сделал...

В модуле формы документа добавил:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // СтандартныеПодсистемы.Печать
    УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма, Элементы.ФормаКоманднаяПанель);
    // Конец СтандартныеПодсистемы.Печать
    // ДополнительныеОтчетыИОбработки
    ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);
    // Конец ДополнительныеОтчетыИОбработки

КонецПроцедуры


// СтандартныеПодсистемы.Печать
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
    
    УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
    
КонецПроцедуры

В модуле менеджера документа написал:

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "ПечатьCMR";
    КомандаПечати.Представление = "Печать CMR";
    КомандаПечати.Обработчик    = "УправлениеПечатьюКлиент.ВыполнитьКомандуПечати";
    КомандаПечати.СписокФорм    = "ФормаСписка,ФормаДокумента";
    
КонецПроцедуры

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

Функция СформироватьCMR(МассивОбъектов)
    
    СсылкаНаОбъект = МассивОбъектов[0];
    
    ТабличныйДокумент     = новый ТабличныйДокумент;    
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РелизОрдер_ПечатьCMR";
    Макет     = ПолучитьОбщийМакет("CMR");
    
    ОбластьШапка         = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока         = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрокаДоп    = Макет.ПолучитьОбласть("СтрокаДоп");
    ОбластьПодвал         = Макет.ПолучитьОбласть("Подвал");

//...............................................................

    ТабличныйДокумент.Вывести(ОбластьШапка);
    ТабличныйДокумент.Вывести(ОбластьСтрока);
    ТабличныйДокумент.Вывести(ОбластьСтрокаДоп);
    ТабличныйДокумент.Вывести(ОбластьПодвал);
    
    Возврат ТабличныйДокумент;

КонецФункции

Ура! Появилась кнопка "Печать CMR". При нажатии на нее ошибка: "{(1)}: Обращение к процедуре объекта как к функции (ВыполнитьКомандуПечати)
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(ОписаниеКоманды)". Что не так?

Мне к документу нужно прикрутитиь кучу печатных форм. Не хотелось бы чтобы для каждой создавалась своя кнопка. Как их сгруппировать в выпадающем списке (Чтоб по науке - кнопка "печать" и выпадающий список с перечнем печатных форм.)?
1 nemoxp
 
20.08.15
09:39
Беру шаблон печатной формы отсюда: http://programmist1s.ru/vneshnie-pechatnyie-formyi-v-1s/

Убираю заполнение параметров и меняю назначение на свое:
МассивНазначений.Добавить("Документ.РелизОрдер");

При регистрации печатной формы автоматом не выбирается назначение, приходится это делать вручную. Почему? Кнопка печати не добавляется. Использую свою кнопку с командой "ОбщаяКоманда.ДополнительныеОтчетыИОбработкиПечатныеФормы". В окне выбираю ее и ошибка "{ВнешняяОбработка.ВПФСчетРТУ.МодульОбъекта(43)}: Индекс находится за границами массива
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "СчетНаОплатуВРТУ", "Счет на оплату (шаблон)", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати));"
2 nemoxp
 
20.08.15
09:44
Ругань судя по всему на "МассивОбъектов[0]". Почему ВПФ не может получить объект (документ)? Перечитал кучу инструкций, качаю шаблоны ВПФ, и не работает. Может чего не хватает в конфе БСП?
Нашел релиз БСП - 2.1.8.5.
3 nemoxp
 
20.08.15
10:30
Никто ничего не может подсказать?
4 BadSanta
 
17.09.15
14:01
Если ты пишешь свою конфу, то зачем тебе разрабатывать внешние ПФ? Ты можешь разработать встроенную ПФ.
Предлагаю взять последнюю БСП и внедрить Печать в твои документы согласно документации.
Если очень хочется именно внешнюю ПФ, тогда возьми из демо БСП пример внешней ПФ и дальше допиливай ее под свой документ.