Регламентированная отчетность УПП. Как прикрепить внешний отчет из другого релиза

Задача

Есть релиз 1.2.22.3 , необходимо перенести фомы баланса (1,2,3,4,5)  из релиза 1.2.37

 

Решение

1) Сохраняем регламентный отчет, как внешний и изменяем у него имя для того, чтобы при загрузке в справочник регламентных отчетов он воспринимался именно, как новый объект. 

Например, РегламентированныйОтчетФорма3_2010 

 

2) Комментируем во внешнем отчете ряд процедур (несколько снижается функциональность, но непосредственно на формирование и выгрузку не влияет)

РегламентированнаяОтчетность.ПередПечатьюРегламентированногоОтчета(ЭтаФорма, Отказ);
РегламентированнаяОтчетность.ПередЗаполнениемРегламентированногоОтчета(ЭтаФорма, Отказ);
 РегламентированнаяОтчетность.ПрорисоватьПодменюПечать

РегламентированнаяОтчетность.ПриИнициализацииФормыРегламентированногоОтчета(ЭтаФорма);
РегламентированнаяОтчетность.ПередОткрытиемФормыРегламентированногоОтчета(ЭтаФорма, Отказ);
РегламентированнаяОтчетность.ПередВыгрузкойРегламентированногоОтчета(ЭтаФорма, Отказ, ПроверятьБлокировки);
РегламентированнаяОтчетность.ОбработкаОповещенияОбИзмененииСтатусаРегламентированногоОтчета(ЭтаФорма, ИмяСобытия, Параметр, Источник);


3)В модуле формы изменяем вызовы в процедуре ПрорисоватьПодменюПечать() на  ПрорисоватьПодменюПечатьРегл() - убираем вызовы РегламентированнаяОтчетность.ПрорисоватьПодменюПечать()

 

4) Сама процедура ПрорисоватьПодменюПечатьРегл()

 Процедура ПрорисоватьПодменюПечатьРегл(Форма, ДействиеВстроеннаяПечать = Неопределено, ДействиеПечатьМЧБ = Неопределено, ПринудительнаяПрорисовкаКнопокВстроеннойПечати = Ложь) Экспорт
 
 ПоследовательностьКнопок = Новый Массив;
 ПоследовательностьКнопок.Добавить("ПечататьСразу");
 ПоследовательностьКнопок.Добавить("ПоказатьБланк");
 ПоследовательностьКнопок.Добавить("Разделитель");
 ПоследовательностьКнопок.Добавить("ПечататьМашиночитаемыйБланк");
 ПоследовательностьКнопок.Добавить("ПоказатьМашиночитаемыйБланк");
 
 // находим панель действий
 КоманднаяПанельДействий = Форма.ЭлементыФормы.Найти("КоманднаяПанельДействий");
 Если КоманднаяПанельДействий = Неопределено Тогда
  Возврат;
 КонецЕсли;
 
 // находим подменю печати
 ПодменюПечати = КоманднаяПанельДействий.Кнопки.Найти("ПодменюПечати");
 Если ПодменюПечати = Неопределено Тогда
  Возврат;
 КонецЕсли;
 
 // если встроенная печать предусмотрена в отчете или не предусмотрена внешняя
 Если ПринудительнаяПрорисовкаКнопокВстроеннойПечати ИЛИ ДействиеВстроеннаяПечать <> Неопределено Тогда
  
  Если ПринудительнаяПрорисовкаКнопокВстроеннойПечати ИЛИ (СвойствоОпределено(Форма, "мПечатьБезШтрихкодаРазрешена") И Форма.мПечатьБезШтрихкодаРазрешена = Истина) Тогда
   
  Если ПодменюПечати.Кнопки.Найти("ПечататьСразу") = Неопределено Тогда
  ПодменюПечати.Кнопки.Добавить("ПечататьСразу", ТипКнопкиКоманднойПанели.Действие, "Печатать сразу", ДействиеВстроеннаяПечать);
  КонецЕсли;
   
  Если ПодменюПечати.Кнопки.Найти("ПоказатьБланк") = Неопределено Тогда
  ПодменюПечати.Кнопки.Добавить("ПоказатьБланк", ТипКнопкиКоманднойПанели.Действие, "Показать бланк", ДействиеВстроеннаяПечать);
  КонецЕсли;
   
  Иначе
   
  КнопкаПечататьСразу = ПодменюПечати.Кнопки.Найти("ПечататьСразу");
  Если КнопкаПечататьСразу <> Неопределено Тогда
  ПодменюПечати.Кнопки.Удалить(КнопкаПечататьСразу);
  КонецЕсли;
   
  КнопкаПоказатьБланк = ПодменюПечати.Кнопки.Найти("ПоказатьБланк");
  Если КнопкаПоказатьБланк <> Неопределено Тогда
  ПодменюПечати.Кнопки.Удалить(КнопкаПоказатьБланк);
  КонецЕсли;
   
  КонецЕсли;
  
 КонецЕсли;
 
 // если внешняя печать не предусмотрена в отчете
 Если ДействиеПечатьМЧБ <> Неопределено Тогда
  
  Если ПодменюПечати.Кнопки.Найти("ПечататьМашиночитаемыйБланк") = Неопределено Тогда
  ПодменюПечати.Кнопки.Добавить("ПечататьМашиночитаемыйБланк", ТипКнопкиКоманднойПанели.Действие, "Печатать сразу бланк формы с двухмерным штрихкодом PDF417", ДействиеПечатьМЧБ);
  КонецЕсли;
  
  Если ПодменюПечати.Кнопки.Найти("ПоказатьМашиночитаемыйБланк") = Неопределено Тогда
  ПодменюПечати.Кнопки.Добавить("ПоказатьМашиночитаемыйБланк", ТипКнопкиКоманднойПанели.Действие, "Показать бланк формы с двухмерным штрихкодом PDF417", ДействиеПечатьМЧБ);
  КонецЕсли;
  
 Иначе
  
  КнопкаПечататьМашиночитаемыйБланк = ПодменюПечати.Кнопки.Найти("ПечататьМашиночитаемыйБланк");
  Если КнопкаПечататьМашиночитаемыйБланк <> Неопределено Тогда
  ПодменюПечати.Кнопки.Удалить(КнопкаПечататьМашиночитаемыйБланк);
  КонецЕсли;
  
  КнопкаПоказатьМашиночитаемыйБланк = ПодменюПечати.Кнопки.Найти("ПоказатьМашиночитаемыйБланк");
  Если КнопкаПоказатьМашиночитаемыйБланк <> Неопределено Тогда
  ПодменюПечати.Кнопки.Удалить(КнопкаПоказатьМашиночитаемыйБланк);
  КонецЕсли;
  
 КонецЕсли;
 
 // добавляем разделитель, если его нет
 Если ПодменюПечати.Кнопки.Количество() > 2 И ДействиеПечатьМЧБ <> Неопределено И ДействиеВстроеннаяПечать <> Неопределено Тогда
  
  Разделитель = ПодменюПечати.Кнопки.Найти("Разделитель");
  Если Разделитель = Неопределено Тогда
  ПодменюПечати.Кнопки.Вставить(2, "Разделитель", ТипКнопкиКоманднойПанели.Разделитель);
  //Иначе
  // ИндексРазделителя = ПодменюПечати.Кнопки.Индекс(Разделитель);
  // ПодменюПечати.Кнопки.Сдвинуть(Разделитель, 2 - ИндексРазделителя);
  КонецЕсли;
  
 КонецЕсли;
 
 // сортируем кнопки
 НомерСледующейКнопки = 0;
 Для ИндексКнопки = 0 По ПоследовательностьКнопок.Количество() - 1 Цикл
  
  ТекКнопка = ПодменюПечати.Кнопки.Найти(ПоследовательностьКнопок[ИндексКнопки]);
  Если ТекКнопка = Неопределено Тогда
  Продолжить;
  КонецЕсли;
  
  ПодменюПечати.Кнопки.Сдвинуть(ТекКнопка, НомерСледующейКнопки - ПодменюПечати.Кнопки.Индекс(ТекКнопка));
  
  НомерСледующейКнопки = НомерСледующейКнопки + 1;
  
 КонецЦикла;
 
 Для Каждого ЭлКнопка Из ПоследовательностьКнопок Цикл
 КонецЦикла;
 
КонецПроцедуры

5) Для того, чтобы внешний регламентый отчет мог быть проверен и выгружен, необходимо внести изменения в модуль формы документа ВыгрузкаРегламентированныхОтчетов

 

Процедура ПроверитьОтчеты()

... 

 //Определим список отчетов, которые должны выгружаться в формате <> Перечисления.ПорядкиОкругленияОтчетности.Окр1
 ОтчетыСохраненныеСНевернымОркуглением = Новый СписокЗначений;
 ОтчетыБаланса = Новый СписокЗначений;
 ОтчетыБаланса.Добавить("РегламентированныйОтчетБаланс");
 ОтчетыБаланса.Добавить("РегламентированныйОтчетБаланс_2010");//<БИОСТАР>
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма2");
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма2_2010");//<БИОСТАР>
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма3");
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма3_2010");//<БИОСТАР>
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма4");
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма4_2010");//<БИОСТАР>
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма5");
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма5_2010");//<БИОСТАР>
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма6");

...

 

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

 

 

 Процедура СформироватьТекстыВыгрузки(ПечатаемыеЛисты = Неопределено)

...

ОТВЕЧАЕТ ЗА ВЫГРУЗКУ ОТЧЕТА

//Определим список отчетов, которые должны выгружаться в формате <> Перечисления.ПорядкиОкругленияОтчетности.Окр1


 ОтчетыСохраненныеСНевернымОркуглением = Новый СписокЗначений;
 ОтчетыБаланса = Новый СписокЗначений;
 ОтчетыБаланса.Добавить("РегламентированныйОтчетБаланс");
 ОтчетыБаланса.Добавить("РегламентированныйОтчетБаланс_2010");//<БИОСТАР>
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма2");
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма2_2010");//<БИОСТАР>
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма3");
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма3_2010");//<БИОСТАР>
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма4");
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма4_2010");//<БИОСТАР>
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма5");
 ОтчетыБаланса.Добавить("РегламентированныйОтчетФорма5_2010");//<БИОСТАР>

 ...

 

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

 

6) Внести новый внешний регламентный отчет в справочник РегламентныеОтчеты