При работе с файловыми хранилищами через объект FTPСоединение многие разработчики сталкиваются с задачей контроля дисковой квоты. Часто возникает потребность понять, хватит ли свободного места для загрузки очередного бэкапа или архива. Давайте подробно разберем, почему эта задача не имеет прямого решения и какие методы можно применить для достижения цели.
Важно понимать, что протокол FTP, описанный в стандарте RFC 959, является «динозавром» сетевых технологий. Он проектировался в эпоху, когда понятие дисковых квот на уровне протокола не было стандартизировано. Объект FTPСоединение в 1С — это лишь обертка над базовыми командами протокола, такими как STOR (загрузка), RETR (скачивание) или LIST (получение списка файлов).
В самом протоколе FTP отсутствует универсальная команда, которая возвращала бы размер свободного пространства на диске. Хотя некоторые современные FTP-серверы поддерживают специфические команды (например, SITE QUOTA), они нестандартны и зависят от конкретной реализации сервера, поэтому рассчитывать на их работу в универсальном коде 1С не стоит. Если вы попытаетесь загрузить файл при исчерпанной квоте, сервер просто вернет ошибку записи (отрыгнет операцию), но заранее спросить «сколько места осталось» через штатный интерфейс FTPСоединение невозможно.
Раз мы не можем спросить сервер «сколько у тебя места», нам придется посчитать это самостоятельно. Рассмотрим по шагам алгоритм, который позволит вам контролировать заполнение хранилища:
НайтиФайлы, чтобы получить список всех объектов в нужных каталогах на FTP.Размер).Посмотрим на пример реализации такого подсчета:
// Предположим, что MaxSpaceBytes - это известный лимит в байтах
ОбщийРазмер = 0;
МассивФайлов = FTPСоединение.НайтиФайлы("/backup/", "*.zip");
Для Каждого Файл Из МассивФайлов Цикл
ОбщийРазмер = ОбщийРазмер + Файл.Размер();
КонецЦикла;
Если (ОбщийРазмер + НовыйФайлРазмер) > MaxSpaceBytes Тогда
// Выполняем уведомление администратора
ОтправитьУведомление("Место на FTP заканчивается!");
Иначе
// Выполняем загрузку
FTPСоединение.Записать(ЛокальныйФайл, УдаленныйФайл);
КонецЕсли;
Если в процессе проверки вы выяснили, что место на исходе, необходимо оперативно оповестить ответственных лиц. Вместо использования устаревшей почты (объект ИнтернетПочта), мы рекомендуем использовать интеграцию с Telegram Bot API.
Для реализации пуш-уведомлений в 1С выполните следующие действия:
HTTPСоединение для отправки POST-запроса к API Telegram.Такой подход обеспечивает мгновенную доставку сообщений на телефон администратора, позволяя вовремя очистить архив или расширить квоту на сервере.
Если ваша задача позволяет внести изменения в архитектуру, мы настоятельно рекомендуем отказаться от использования FTP в пользу более современных решений:
df -h, которая вернет точную информацию о свободном месте на диске. Хотя 1С не поддерживает SFTP «из коробки», задачу можно решить через вызов внешних консольных клиентов или использование COM-объектов.Подводя итог, можно сказать, что хотя штатного метода для получения размера свободного места на FTP в платформе 1С не существует, вы всегда можете реализовать надежный мониторинг через аудит содержимого папок и предварительный расчет занимаемого объема. Это защитит вашу систему от ошибок при передаче данных и позволит своевременно реагировать на нехватку ресурсов.