Всем доброго дня!
Сегодня обновили ЗУП до последней версии 3.1.27.23, и после обновления перестали формироваться все дополнительные печатные формы. Ошибку не выдают, просто не формируются. Может кто в курсе где что поменялось в коде БСП? Во вложении пример одной из печатных форм для справочника сотрудников.
---
(7)Кустарно и впопыхах писал, по этому на мой взгляд корявенько, но работает (во вложении обработка "НаправлениеНаМедОсмотр.epf"). Суть изменений смотрите в процедуре "Ок" формы обработки, и в функции "Печать" модуля обработки.
За основу брал обработку "ТабДок в ПечатьДокументов.epf" (Тоже во вложении).
---
Изменилась общая форма "ПечатьДокументов".
---
Не, это сомнительный вариант, добавлять старую форму. Переписал модуль формирования табличного документа обработок под новую форму.
---
Изменилась общая форма "ПечатьДокументов".
---
А есть мысли как поправить?
---
Да есть, вот из новой версии в Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

```1c
    Если Параметры.КоллекцияПечатныхФорм = Неопределено Тогда
    Отказ = Истина;
    Возврат;
    Иначе
    КоллекцияПечатныхФорм = Параметры.КоллекцияПечатныхФорм;
    ИсключитьОфисныеДокументыИзКомплектов(КоллекцияПечатныхФорм);
    ОбъектыПечати = Параметры.ОбъектыПечати;
    КонецЕсли;
```

Я через расширение сделал так

```1c
    Если Параметры.КоллекцияПечатныхФорм = Неопределено Тогда

    ИменаМакетов = Параметры.ПараметрыИсточника.ИдентификаторКоманды;

    ИменаМакетов = СтрРазделить(ИменаМакетов, ",");

    КоллекцияПечатныхФорм = СформироватьПечатныеФормы(ИменаМакетов, Отказ);

    Если Отказ Тогда
    Возврат;
    КонецЕсли;

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

```1c
    КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(); на
    КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
```

Разработчик обновил версию БСП.
---
КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(); на
    КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Аналогичная ситуация, печатная форма после этого стала работать, а то вовсе не появлялась после нажатия на нее
---
Спасибо за "рецепт", помог. Бухгалтерия 3, печатная форма не появлялась после нажатия на нее, после этого стала работать.
---
У меня слетели печатные формы, в которых была форма обработки. Выяснил, что изменилась процедура ПриОткрытии в форме и добавилась процедура ВыполнитьОткрытиеПечатнойФормыФормированияПечатныхФорм.
  Было просто ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
  Стало:

```1c
    ПараметрыОткрытия.УникальныйИдентификаторХранилища = ЭтаФорма.УникальныйИдентификатор;

    ДлительнаяОперация = УправлениеПечатьюВызовСервера.НачатьФормированиеПечатныхФорм(ПараметрыОткрытия);
    ПараметрыОткрытия.ВладелецФормы = ЭтаФорма;

    ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыполнитьОткрытиеПечатнойФормыФормированияПечатныхФорм", ЭтотОбъект, ПараметрыОткрытия);
    ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, УправлениеПечатьюСлужебныйКлиент.ПараметрыОжидания(ЭтаФорма));
```

Изменил во всех и все заработало.
---
ПараметрыОткрытия.УникальныйИдентификаторХранилища = ЭтаФорма.УникальныйИдентификатор;

Добрый день. А пример можете выложить что и где заменили?
---
Вот такой обработчик модуля формы полный теперь

```1c
    #Область ОбработчикиСобытийФормы

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)

    Если ЭтоОтладка() Тогда
    Возврат;
    КонецЕсли;

    ПараметрыИсточника = Новый Структура;
    ПараметрыИсточника.Вставить("ИдентификаторКоманды", Параметры.ИдентификаторКоманды);
    ПараметрыИсточника.Вставить("ОбъектыНазначения", Параметры.ОбъектыНазначения);

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

    ПараметрыОткрытия.УникальныйИдентификаторХранилища = ЭтаФорма.УникальныйИдентификатор;

    ДлительнаяОперация = УправлениеПечатьюВызовСервера.НачатьФормированиеПечатныхФорм(ПараметрыОткрытия);
    ПараметрыОткрытия.ВладелецФормы = ЭтаФорма;

    ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыполнитьОткрытиеПечатнойФормыФормированияПечатныхФорм", ЭтотОбъект, ПараметрыОткрытия);
    ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, УправлениеПечатьюСлужебныйКлиент.ПараметрыОжидания(ЭтаФорма));

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

    &НаКлиенте
    Процедура ВыполнитьОткрытиеПечатнойФормыФормированияПечатныхФорм(РезультатФоновойОперации, ПараметрыОткрытия) Экспорт

    Если Не РезультатФоновойОперации = Неопределено Тогда
    Если РезультатФоновойОперации.Статус = "Ошибка" Тогда
    ПоказатьПредупреждение(, РезультатФоновойОперации.КраткоеПредставлениеОшибки);
    Иначе
    СтруктураРезультата = ПолучитьИзВременногоХранилища(РезультатФоновойОперации.АдресРезультата);

    ПараметрыОткрытия.Вставить("ОбъектыПечати", СтруктураРезультата.ОбъектыПечати);
    ПараметрыОткрытия.Вставить("ПараметрыВывода", СтруктураРезультата.ПараметрыВывода);
    ПараметрыОткрытия.Вставить("КоллекцияПечатныхФорм", СтруктураРезультата.КоллекцияПечатныхФорм);

    ВладелецФормы = ПараметрыОткрытия.ВладелецФормы;
    ПараметрыОткрытия.Удалить("ВладелецФормы");

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

    Закрыть();

    КонецПроцедуры
    #КонецОбласти
```
---
deleted
---
Вот так вроде работает. ПечатьАкта это кнопка на форме

```1c
    &НаКлиенте
    Процедура ПечатьАкта(Команда)

    СтандартнаяОбработка = Ложь;

    ПараметрыИсточника = Новый Структура;
    ПараметрыИсточника.Вставить("ИдентификаторКоманды", Параметры.ИдентификаторКоманды);
    ПараметрыИсточника.Вставить("ОбъектыНазначения", Параметры.ОбъектыНазначения);

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

    ПараметрыОткрытия.УникальныйИдентификаторХранилища = ЭтаФорма.УникальныйИдентификатор;

    СформированныеПечатныеФормы = УправлениеПечатьюВызовСервера.НачатьФормированиеПечатныхФорм(ПараметрыОткрытия);
    ПараметрыОткрытия.ВладелецФормы = ВладелецФормы;

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

    ВыполнитьКомандуПечатиПослеФормированияПечатныхФорм(РезультатФоновойОперации, ПараметрыОткрытия);

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

    &НаКлиенте
    Процедура ВыполнитьКомандуПечатиПослеФормированияПечатныхФорм(РезультатФоновойОперации, ПараметрыОткрытия) Экспорт
    Если РезультатФоновойОперации <> Неопределено Тогда
    Если РезультатФоновойОперации.Статус = "Ошибка" Тогда
    ВызватьИсключение РезультатФоновойОперации.КраткоеПредставлениеОшибки;
    КонецЕсли;
    СтруктураРезультата = ПолучитьИзВременногоХранилища(РезультатФоновойОперации.АдресРезультата);

    ПараметрыОткрытия.Вставить("ОбъектыПечати", СтруктураРезультата.ОбъектыПечати);
    ПараметрыОткрытия.Вставить("ПараметрыВывода", СтруктураРезультата.ПараметрыВывода);
    ПараметрыОткрытия.Вставить("ПараметрыПечати", СтруктураРезультата.ПараметрыПечати);

    КоллекцияПечатныхФорм = СтруктураРезультата.КоллекцияПечатныхФорм;
    ОфисныеДокументы = СтруктураРезультата.ОфисныеДокументы;
    Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
    ОфисныеДокументыНовыеАдреса = Новый Соответствие();
    Если ЗначениеЗаполнено(ПечатнаяФорма.ОфисныеДокументы) Тогда
    Для Каждого ОфисныйДокумент Из ПечатнаяФорма.ОфисныеДокументы Цикл
    ОфисныеДокументыНовыеАдреса.Вставить(ПоместитьВоВременноеХранилище(ОфисныеДокументы[ОфисныйДокумент.Ключ], ПараметрыОткрытия.УникальныйИдентификаторХранилища), ОфисныйДокумент.Значение);
    КонецЦикла;
    ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументыНовыеАдреса;
    КонецЕсли;
    КонецЦикла;

    ПараметрыОткрытия.Вставить("КоллекцияПечатныхФорм", КоллекцияПечатныхФорм);

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

    ВладелецФормы = ПараметрыОткрытия.ВладелецФормы;
    ПараметрыОткрытия.Удалить("ВладелецФормы");

    ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ВладелецФормы, Строка(Новый УникальныйИдентификатор));
    КонецЕсли;
    КонецПроцедуры
```
---
Для передачи параметров печати, модуль команды должен быть такой:

```1c
    СтандартнаяОбработка = Ложь;

    ДополнительныеПараметры = Новый Структура();
    ДополнительныеПараметры.Вставить("ОбщиеДанные", ПараметрыПечати());

    ОбъектыНазначения = Новый СписокЗначений;
    ОбъектыНазначения.Добавить(ДополнительныеПараметры);

    Для каждого ОбъектНазначения Из Параметры.ОбъектыНазначения Цикл
    ОбъектыНазначения.Добавить(ОбъектНазначения);
    КонецЦикла;

    ПараметрыИсточника = Новый Структура;
    ПараметрыИсточника.Вставить("ИдентификаторКоманды", Параметры.ИдентификаторКоманды);
    ПараметрыИсточника.Вставить("ОбъектыНазначения", ОбъектыНазначения);

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

    ПараметрыОткрытия.УникальныйИдентификаторХранилища = ЭтаФорма.УникальныйИдентификатор;

    СформированныеПечатныеФормы = УправлениеПечатьюВызовСервера.НачатьФормированиеПечатныхФорм(ПараметрыОткрытия);
    ПараметрыОткрытия.ВладелецФормы = ВладелецФормы;

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

    ВыполнитьКомандуПечатиПослеФормированияПечатныхФорм(РезультатФоновойОперации, ПараметрыОткрытия);
```