При разработке и сопровождении внешних печатных форм на базе Библиотеки стандартных подсистем (БСП) программисты часто сталкиваются с ситуацией: в функции СведенияОВнешнейОбработке был расширен массив назначений (добавлены новые документы), но после загрузки новой версии обработки в информационную базу список документов в карточке объекта остался прежним. Рассмотрим подробно, почему это происходит, как устроена логика БСП и какие шаги необходимо предпринять для корректного обновления состава назначений.
Проанализируем программный код БСП, который отвечает за регистрацию дополнительных отчетов и обработок. Основная логика сосредоточена в общем модуле ДополнительныеОтчетыИОбработки. В момент загрузки файла системы выполняется сопоставление данных, возвращаемых функцией СведенияОВнешнейОбработке, с уже существующей записью в справочнике ДополнительныеОтчетыИОбработки.
Выясним причину такого поведения, изучив типовой фрагмент кода (актуально для многих релизов ЗУП 3, ERP и КА):
Если Объект.ЭтоНовый ИЛИ Объект.ИмяОбъекта <> Результат.ИмяОбъекта ИЛИ Объект.Вид <> РегистрационныеДанные.Вид Тогда
Объект.Назначение.Очистить;
Объект.Разделы.Очистить;
Объект.Вид = РегистрационныеДанные.Вид;
КонецЕсли;
// Если не заполнено назначение - устанавливаем назначение из обработки.
Если Объект.Назначение.Количество() = 0 И Объект.Вид <> ВидДополнительныйОтчет И Объект.Вид <> ВидДополнительнаяОбработка Тогда
// Здесь происходит заполнение из МассивНазначений
КонецЕсли;
Из этого фрагмента становится ясно, что автоматическое заполнение табличной части Назначение происходит только в двух случаях:
Если же вы просто обновляете файл существующей обработки, БСП сознательно не очищает список назначений. Это сделано для того, чтобы не затереть ручные изменения, внесенные администратором системы в пользовательском режиме. Пользователь может самостоятельно добавить или удалить документы из списка назначений в интерфейсе 1С, и система отдает приоритет этим настройкам перед программным кодом обработки.
Это самый простой и быстрый способ, не требующий изменения кода или удаления регистрации. Разберем его по шагам:
Кадровый перевод списком).Если вы хотите, чтобы система заново подтянула все настройки из метода СведенияОВнешнейОбработке, выполните следующие действия:
Важно: При этом способе будут потеряны все настройки доступа (права пользователей), если они были настроены индивидуально для этой обработки.
Чтобы минимизировать ошибки при регистрации, проанализируем правильность заполнения структуры данных. Рассмотрим пример функции для печатной формы, работающей с несколькими документами:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.2");
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.КадровыйПеревод");
МассивНазначений.Добавить("Документ.КадровыйПереводСписком");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма;
ПараметрыРегистрации.Назначение = МассивНазначений;
ПараметрыРегистрации.Наименование = "Печатная форма Т-5 (расширенная)";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
ПараметрыРегистрации.Версия = "1.2";
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Печать формы Т-5", "Т5_Расширенная", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Обратите внимание на параметр Идентификатор в команде (в примере это "Т5_Расширенная"). Если в новой версии вы измените идентификатор команды, БСП может создать дублирующую команду в карточке обработки, что приведет к путанице в меню «Печать».
Иногда даже при наличии галочки в справочнике печатная форма не появляется в меню документа. Рассмотрим неочевидные причины:
Для того чтобы документ «увидел» внешние печатные формы, он должен быть интегрирован с подсистемой печати БСП. Проверьте в конфигураторе модуль менеджера документа КадровыйПереводСписком. В нем должна присутствовать процедура:
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
// Код регистрации типовых команд
КонецПроцедуры
Если этой процедуры нет или она не вызывается в соответствующих формах, внешние обработки не смогут «прикрепиться» к интерфейсу этого объекта.
1С активно кэширует метаданные и состав команд. После обновления обработки рекомендуется:
Проанализируем ситуацию со списочными документами. В 1С:ЗУП документ КадровыйПеревод содержит данные по одному сотруднику, а КадровыйПереводСписком — по нескольким. Если ваша обработка в процедуре Печать ожидает только один тип ссылки или некорректно обрабатывает МассивОбъектов, система может выдать ошибку в момент формирования меню. Убедитесь, что ваш код универсален:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Проверяем типы объектов в массиве и формируем печатные формы
КонецПроцедуры
Поведение системы, при котором назначения не обновляются автоматически, является штатным для БСП. Это защитный механизм. Для решения проблемы используйте ручную настройку состава назначений в карточке обработки. Если вы находитесь на этапе разработки и часто меняете состав документов, самым эффективным будет удаление и повторное создание элемента в справочнике дополнительных обработок.