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