Почему при обновлении внешней печатной формы в список назначений попадают не все документы?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При разработке и сопровождении внешних печатных форм на базе Библиотеки стандартных подсистем (БСП) программисты часто сталкиваются с ситуацией: в функции СведенияОВнешнейОбработке был расширен массив назначений (добавлены новые документы), но после загрузки новой версии обработки в информационную базу список документов в карточке объекта остался прежним. Рассмотрим подробно, почему это происходит, как устроена логика БСП и какие шаги необходимо предпринять для корректного обновления состава назначений.

Анализ механизма регистрации в БСП

Проанализируем программный код БСП, который отвечает за регистрацию дополнительных отчетов и обработок. Основная логика сосредоточена в общем модуле ДополнительныеОтчетыИОбработки. В момент загрузки файла системы выполняется сопоставление данных, возвращаемых функцией СведенияОВнешнейОбработке, с уже существующей записью в справочнике ДополнительныеОтчетыИОбработки.

Выясним причину такого поведения, изучив типовой фрагмент кода (актуально для многих релизов ЗУП 3, ERP и КА):


Если Объект.ЭтоНовый ИЛИ Объект.ИмяОбъекта <> Результат.ИмяОбъекта ИЛИ Объект.Вид <> РегистрационныеДанные.Вид Тогда 
    Объект.Назначение.Очистить; 
    Объект.Разделы.Очистить; 
    Объект.Вид = РегистрационныеДанные.Вид; 
КонецЕсли; 

// Если не заполнено назначение - устанавливаем назначение из обработки. 
Если Объект.Назначение.Количество() = 0 И Объект.Вид <> ВидДополнительныйОтчет И Объект.Вид <> ВидДополнительнаяОбработка Тогда
    // Здесь происходит заполнение из МассивНазначений
КонецЕсли;

Из этого фрагмента становится ясно, что автоматическое заполнение табличной части Назначение происходит только в двух случаях:

  1. Вы создаете новый элемент справочника (первая загрузка обработки).
  2. У существующего элемента изменился Тип (Вид) или Имя объекта (внутренний идентификатор).

Если же вы просто обновляете файл существующей обработки, БСП сознательно не очищает список назначений. Это сделано для того, чтобы не затереть ручные изменения, внесенные администратором системы в пользовательском режиме. Пользователь может самостоятельно добавить или удалить документы из списка назначений в интерфейсе 1С, и система отдает приоритет этим настройкам перед программным кодом обработки.

Способ 1: Ручная корректировка состава назначений

Это самый простой и быстрый способ, не требующий изменения кода или удаления регистрации. Разберем его по шагам:

  1. Откройте раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Перейдите по ссылке Дополнительные отчеты и обработки.
  3. Найдите вашу печатную форму и откройте ее карточку.
  4. В верхней части формы или на вкладке «Команды» (в зависимости от версии БСП) найдите гиперссылку, указывающую на количество объектов назначения (например, «Размещено в 1 объекте»).
  5. В открывшемся окне установите флажки напротив тех документов, в которых должна появиться эта печатная форма (например, Кадровый перевод списком).
  6. Нажмите «ОК» и обязательно Записать и закрыть карточку обработки.

Способ 2: «Чистая» перерегистрация обработки

Если вы хотите, чтобы система заново подтянула все настройки из метода СведенияОВнешнейОбработке, выполните следующие действия:

  1. Пометьте существующую обработку в справочнике на удаление.
  2. Создайте новую запись и загрузите файл.

Важно: При этом способе будут потеряны все настройки доступа (права пользователей), если они были настроены индивидуально для этой обработки.

Программный контроль: структура СведенияОВнешнейОбработке

Чтобы минимизировать ошибки при регистрации, проанализируем правильность заполнения структуры данных. Рассмотрим пример функции для печатной формы, работающей с несколькими документами:


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

Обратите внимание на параметр Идентификатор в команде (в примере это "Т5_Расширенная"). Если в новой версии вы измените идентификатор команды, БСП может создать дублирующую команду в карточке обработки, что приведет к путанице в меню «Печать».

Дополнительные факторы, препятствующие появлению команды

Иногда даже при наличии галочки в справочнике печатная форма не появляется в меню документа. Рассмотрим неочевидные причины:

1. Подключение к подсистеме «Печать»

Для того чтобы документ «увидел» внешние печатные формы, он должен быть интегрирован с подсистемой печати БСП. Проверьте в конфигураторе модуль менеджера документа КадровыйПереводСписком. В нем должна присутствовать процедура:


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

Если этой процедуры нет или она не вызывается в соответствующих формах, внешние обработки не смогут «прикрепиться» к интерфейсу этого объекта.

2. Кэширование данных

1С активно кэширует метаданные и состав команд. После обновления обработки рекомендуется:

  1. Нажать Записать и закрыть в карточке обработки.
  2. Перезапустить сеанс пользователя.
  3. В некоторых случаях — очистить локальный кэш конфигурации на компьютере пользователя.

3. Совместимость типов (МассивОбъектов)

Проанализируем ситуацию со списочными документами. В 1С:ЗУП документ КадровыйПеревод содержит данные по одному сотруднику, а КадровыйПереводСписком — по нескольким. Если ваша обработка в процедуре Печать ожидает только один тип ссылки или некорректно обрабатывает МассивОбъектов, система может выдать ошибку в момент формирования меню. Убедитесь, что ваш код универсален:


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    // Проверяем типы объектов в массиве и формируем печатные формы
КонецПроцедуры

Резюме

Поведение системы, при котором назначения не обновляются автоматически, является штатным для БСП. Это защитный механизм. Для решения проблемы используйте ручную настройку состава назначений в карточке обработки. Если вы находитесь на этапе разработки и часто меняете состав документов, самым эффективным будет удаление и повторное создание элемента в справочнике дополнительных обработок.

← На главную