Почему внешняя печатная форма в 1С:Фреш постоянно требует разрешение на доступ к папке временных файлов?

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

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

«Каталоги файловой системы (1): Папка временных файлов — Чтение данных: Нет, Запись данных: Нет».

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

Анализ причин: откуда берется обращение к каталогу временных файлов

Посмотрим на типовой алгоритм формирования счета на оплату в конфигурации «Управление нашей фирмой» (1С:УНФ). Даже если сам модуль обработки напрямую не сохраняет файлы на диск сервера, к файловой системе обращаются встроенные механизмы типовой конфигурации:

  1. Генерация и вывод штрихкодов и QR-кодов. В коде процедуры СформироватьПФ присутствует строка:
    ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, СтрокаСвойствОбластиМакета.ОбластьМакета, ДанныеОбъекта.Ссылка);
    Для построения двумерных или линейных кодов подсистема штрихкодирования использует внешнюю компоненту печати штрихкодов либо служебные алгоритмы генерации графики. При инициализации компоненты платформа распаковывает двоичные данные библиотеки во временную директорию текущего сеанса и взаимодействует с ней через файловый кэш.
  2. Подсистема работы с присоединенными файлами. При работе с логотипами организаций и факсимиле подписей/печатей типовые функции БСП могут обращаться к временному хранилищу файлов на диске для масштабирования картинок или преобразования форматов.
  3. Появление пустого разрешения («Чтение: Нет, Запись: Нет»). Если в функции СведенияОВнешнейОбработке() было вызвано получение разрешения РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов() без явного указания параметров, либо с параметрами по умолчанию, формируется дескриптор запроса с нулевыми правами (чтение = Ложь, запись = Ложь). Система видит наличие заявленного ресурса, но из-за отсутствия фактических прав не может окончательно согласовать профиль безопасности, заставляя платформу выводить предупреждение снова и снова.

Вариант 1. Явное декларирование требуемых разрешений в функции регистрации

Если для печатной формы объективно требуется вывод штрихкодов, QR-кодов или вспомогательных графических элементов, работу с файловой системой сеанса необходимо легализовать в профиле безопасности обработки. Отключить безопасный режим в облаке нельзя: параметр ПараметрыРегистрации.БезопасныйРежим = Истина; строго обязателен для прохождения аудита 1С:Фреш.

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


Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.2.1.243");
	ПараметрыРегистрации.Информация = "СчетНаОплатуСпец";
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	
	// Обязательно увеличиваем номер версии при каждом изменении состава разрешений
	ПараметрыРегистрации.Версия = "2.3";
	ПараметрыРегистрации.Наименование = "Счет на оплату (спец)";
	ПараметрыРегистрации.БезопасныйРежим = Истина;
	
	// Назначение для документа ЗаказПокупателя
	Назначение = ПараметрыРегистрации.Назначение;
	Назначение.Добавить("Документ.ЗаказПокупателя");
	
	КомандаПечати = ПараметрыРегистрации.Команды.Добавить();
	КомандаПечати.Представление = "Счет на оплату (спец)";
	КомандаПечати.Идентификатор = "ПечатьСчетНаОплатуСпец";
	КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	
	// Формируем явные разрешения на использование ресурсов
	ПараметрыРегистрации.Вставить("Разрешения", Новый Массив);
	
	// 1. Каталог временных файлов с явным указанием чтения и записи (Истина, Истина)
	РазрешениеФайлы = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(
		Истина, 
		Истина, 
		"Использование временных графических файлов для формирования печатной формы"
	);
	ПараметрыРегистрации.Разрешения.Добавить(РазрешениеФайлы);
	
	// 2. Разрешение на внешнюю компоненту печати штрихкодов из состава конфигурации
	РазрешениеКомпонента = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты(
		"ОбщийМакет.КомпонентаПечатиШтрихкодов", 
		"Генерация штрихкода в печатной форме счета"
	);
	ПараметрыРегистрации.Разрешения.Добавить(РазрешениеКомпонента);
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

Обратите внимание: сервис 1С:Фреш кэширует структуру разрешений по номеру версии обработки. Если вы изменили состав разрешений в коде, но оставили номер версии прежним (например, "2.2"), система не обновит профиль безопасности информационной базы, и окно продолжит появляться.

Вариант 2. Полный отказ от использования файловой системы

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

  1. Найдем в модуле обработки вызов метода штрихкодирования и отключим его:
    
    // ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет,
    //     СтрокаСвойствОбластиМакета.ОбластьМакета, ДанныеОбъекта.Ссылка);
    
  2. Убедимся, что в функции СведенияОВнешнейОбработке() отсутствует ключ Разрешения либо массив разрешений пуст.
  3. Увеличим номер версии в ПараметрыРегистрации.Версия (например, установим значение "2.3").
  4. Обновим внешнюю обработку в приложении и повторно пройдем процедуру аудита.

Вариант 3. Очистка зависшего профиля безопасности в базе данных

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

  1. Зайдем в информационную базу под учетной записью с правами администратора.
  2. Перейдем в раздел администрирования: Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
  3. Откроем карточку нашей обработки. Если в верхней части формы отображается гиперссылка с предупреждением о необходимости настройки разрешений, нажмем её и подтвердим применение профилей безопасности.
  4. Если предупреждение не пропадает, полностью удалим обработку из списка дополнительных отчетов и обработок, после чего загрузим файл заново с повышенным номером версии. При повторном добавлении БСП корректно пересоздаст служебные записи в регистрах сведений разрешений безопасности.
← На главную