При разработке внешних печатных форм в конфигурациях на базе БСП (Библиотека стандартных подсистем), таких как 1С:Управление нашей фирмой, разработчики часто сталкиваются с задачей ограничения видимости команд. Вопрос заключается в следующем: как сделать так, чтобы кнопка вызова печатной формы отображалась в ФормаДокумента, но отсутствовала в других формах того же документа, например, в ФормаЗаказНаряда? В качестве основы для разработки можно использовать пример внешней печатной формы на актуальной версии БСП.
СписокФормМногие разработчики пытаются использовать параметр СписокФорм внутри функции СведенияОВнешнейОбработке, перечисляя через запятую необходимые формы. Однако, важно понимать, что этот механизм БСП имеет строгие ограничения. Попытки передать некорректные строки или нестандартные конструкции приводят к ошибкам парсинга, таким как «Преобразование значения к типу Число не может быть выполнено».
Рассмотрим стандартную структуру регистрации:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить(\"Вид\", \"Печатнаяформа\");
ПараметрыРегистрации.Вставить(\"СписокФорм\", \"ФормаДокумента\");
// ... остальной код регистрации
Возврат ПараметрыРегистрации;
КонецФункции
Если указать ФормаДокумента, система БСП по умолчанию пытается привязать команду к формам объекта. Проблема заключается в том, что БСП часто интерпретирует эти настройки глобально для всех форм объекта, использующих стандартный механизм печати. Поэтому простого «исключения» через строку параметров добиться сложно.
Самый быстрый и правильный способ, не требующий внесения изменений в код обработки или конфигурацию — это использование встроенных настроек справочника ДополнительныеОтчетыИОбработки.
СведенияОВнешнейОбработке.Если вам необходимо жесткое ограничение именно на уровне логики выполнения, вы можете проанализировать контекст вызова внутри процедуры Печать. При вызове из формы, в параметры команды передается информация о том, откуда был произведен вызов.
Давайте рассмотрим, как можно организовать проверку в экспортной процедуре Печать:
Процедура Печать(МассивОбъектов, ПараметрыПечати) Экспорт
// Проверяем, из какой формы вызван код
// Если параметр формы содержит недопустимое значение, прерываем выполнение
Если НЕ ЭтоНужнаяФорма(ПараметрыПечати) Тогда
Возврат;
КонецЕсли;
// Дальнейшее формирование печатной формы
КонецПроцедуры
Этот метод требует отладки через замер производительности или отладчик, чтобы понять, какой именно идентификатор формы передается в структуру ПараметрыПечати вашей конкретной версии конфигурации.
Если требования к интерфейсу очень жесткие и необходимо скрыть кнопку на уровне ПриСозданииНаСервере, оптимальным решением является использование Расширений конфигурации.
В отличие от внешних печатных форм, расширение позволяет:
ПриСозданииНаСервере любой формы документа.Видимость или Доступность для конкретных команд печати или групп кнопок.УправлениеПечатьюКлиент для модификации списка команд на лету.Хотя вы упоминали, что требуется именно внешняя печатная форма, использование расширения для управления видимостью стандартных команд и внешних обработок является «золотым стандартом» разработки в 1С, так как это не нарушает логику работы подсистемы ДополнительныеОтчетыИОбработки и не приводит к ошибкам при обновлении конфигурации.
Разберем ситуацию по шагам для достижения успеха:
СписокФорм, убедитесь, что вы указываете имена форм, которые точно существуют в метаданных документа.БСП, который спроектирован для универсальной работы во всех формах документа.Надеемся, эти рекомендации помогут вам эффективно настроить отображение печатных форм и сделать работу пользователей в 1С более удобной и логичной!