Работа в облачном сервисе «1С:Предприятие 8 через интернет» (1С:Фреш) накладывает на пользователей и разработчиков ряд жестких ограничений. Одно из самых частых затруднений — это невозможность использовать привычную универсальную обработку ЗагрузкаДанныхИзТабличногоДокумента.epf для переноса номенклатуры, контрагентов и других справочников из файлов Excel. Попытка загрузить стандартную обработку в личный кабинет сервиса заканчивается отклонением на этапе автоматического аудита безопасности.
В этой статье мы подробно проанализируем, почему классический загрузчик не работает в облаке, и разберем по шагам все доступные альтернативные методы загрузки сложных данных (включая такие реквизиты, как коды ТН ВЭД, страны происхождения, статьи затрат и т. д.) в конфигурацию «1С:Бухгалтерия 3.0» во Фреше.
---
Выясним причину, по которой служба безопасности сервиса 1С:Фреш блокирует стандартную обработку загрузки. Здесь действуют три ключевых фактора:
Выполнить() или Вычислить()) категорически запрещено, так как это ставит под угрозу безопасность данных других арендаторов сервера.Excel.Application). Серверная инфраструктура 1С:Фреш функционирует под управлением операционных систем семейства Linux. В Linux-среде COM-объекты Microsoft физически отсутствуют, что привело бы к критической ошибке при попытке прочитать файл на стороне сервера.---
Прежде чем прибегать к сложным техническим схемам, рассмотрим штатный функционал импорта данных, который уже встроен разработчиками фирмы «1С» в конфигурацию и гарантированно работает в облаке без каких-либо доработок.
Для загрузки номенклатуры или контрагентов выполним следующие действия:
Важное ограничение: Штатный импорт спроектирован для максимально простой загрузки. Он отлично справляется с базовыми реквизитами (наименование, артикул, единица измерения, ставка НДС, цена). Однако, если вам требуется загрузить специфические данные (например, код ТН ВЭД, страну происхождения, номер ГТД, признак маркированной продукции или дополнительные реквизиты), стандартный помощник загрузки вам не поможет — эти поля в нем просто отсутствуют.
---
Если нам нужно оперативно загрузить данные в базу при оформлении конкретных хозяйственных операций, мы можем воспользоваться удобным механизмом заполнения табличных частей документов.
Проанализируем эту возможность на примере документа «Поступление (акт, накладная, УПД)»:
Ctrl+C) и вставить их прямо в форму 1С нажатием сочетания клавиш Ctrl+V.Этот метод хорош тем, что он абсолютно штатный, не требует установки дополнительных расширений и позволяет на лету создавать недостающие карточки товаров. Тем не менее, он также ограничен базовым набором реквизитов.
---
Если перед нами стоит задача разовой масштабной загрузки сложного каталога товаров со множеством специфических реквизитов (включая страны происхождения, классификаторы ТН ВЭД и т.д.), идеальным выходом будет использование локальной «транзитной» базы данных.
Разберем по шагам эту надежную схему:
ЗагрузкаДанныхИзТабличногоДокумента.epf для управляемых форм. Открываем ее через меню «Файл — Открыть».---
Для программистов 1С наиболее профессиональным решением является доработка кода классического загрузчика под жесткие требования стандартов безопасности сервиса 1С:Фреш с последующей отправкой обработки на аудит.
Рассмотрим подробнее технические изменения, которые необходимо внести в код внешней обработки:
Во-первых, полностью откажемся от использования COM-соединения при чтении файлов Microsoft Excel. Вместо этого задействуем штатный кроссплатформенный метод платформы ТабличныйДокумент.Прочитать(). Он работает непосредственно на стороне сервера 1С (в том числе под Linux) и не требует наличия установленного пакета MS Office.
Пример безопасного серверного кода для чтения файла:
&НаСервере
Функция ПрочитатьФайлВТабличныйДокумент(АдресФайлаВоВременномХранилище) Экспорт
ТабДок = Новый ТабличныйДокумент;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
// Получаем двоичные данные файла из безопасного временного хранилища
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище);
ДвоичныеДанные.Записать(ИмяВременногоФайла);
Попытка
// Читаем файл встроенным методом платформы
ТабДок.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
УдалитьФайлы(ИмяВременногоФайла);
Исключение
УдалитьФайлы(ИмяВременногоФайла);
ЗаписатьЛогОшибки(ОписаниеОшибки());
ВызватьИсключение "Ошибка чтения табличного документа: " + ОписаниеОшибки();
КонецПопытки;
Возврат ТабДок;
КонецФункции
Во-вторых, полностью вырежем из модуля обработки интерактивные элементы управления, связанные с динамическим выполнением кода. Все строки кода, содержащие функции Вычислить() или Выполнить(), должны быть удалены или переписаны на безопасные предопределенные алгоритмы выбора данных.
В-третьих, адаптируем интерфейс для работы исключительно в управляемых формах. Все процедуры взаимодействия с файловой системой клиента должны использовать асинхронные вызовы платформы 8.3, такие как НачатьПомещениеФайлаНаСервер().
После проведения данной оптимизации готовую обработку можно смело отправлять через своего обслуживающего партнера на ручной аудит в личном кабинете 1С:Фреш. После успешного прохождения проверки она станет доступна вашей компании для постоянного использования в облаке.
---
Не забываем и про самый простой современный способ расширения возможностей облака. Фирма «1С» активно развивает собственный Магазин расширений (Каталог расширений), интегрированный непосредственно в интерфейс сервиса.
Чтобы найти готовый профессиональный загрузчик:
Использование готовых решений из Магазина расширений избавляет вас от необходимости поддерживать и регулярно обновлять собственную обработку при выходе новых релизов конфигурации.