В работе часто нужно отдать внешнему получателю уже посчитанный отчёт с общей формы — как файл .xlsx на заранее прописанный FTP. Штатная рассылка отчётов для этого не подходит: она живёт через справочник рассылок, не берёт табличный документ с экрана и не умеет FTPS. Предлагаю расширение, которое добавляет на общую форму отчёта кнопку «Отправить на FTP».
Расширение рассчитано на боевую базу на поддержке: типовую конфигурацию не меняем, общую форму отчёта не заимствуем. Комплект ставится на любую программу с БСП 3.1 и ОбщаяФорма.ФормаОтчета.
В расширении нет документов и справочников прикладной конфигурации, нет реструктуризации типовых объектов. Пароль FTP в регистр не пишется.
Кнопку вешаем через ОтчетыПереопределяемый и ОтчетыСервер.ВывестиКоманду. Так команда попадает в штатную группу печати/сохранения, обработчик остаётся в модуле расширения, хрупкую общую форму не трогаем.
Общая настройка
- Подключить расширение, обновить конфигурацию БД.
- Выдать роли:
Отф_НастройкаFtp— кому править сервер,Отф_ОтправкаНаFtp— кому жать кнопку. Пользователю с Полными правами отдельные роли расширения не нужны. - Открыть настройки FTP и сохранить хост, порт (по умолчанию 21), пользователя, пароль, каталог. FTPS по умолчанию выключен.

Навигационная ссылка обработки:
Советую сразу нажать «Проверить связь»: на сервер уходит служебный файл Отф_proverka_svyazi.tmp и сразу удаляется. Файл отчёта при этом не создаётся.

Пример для первой отправки
Нужно отдать именно то, что пользователь видит после «Сформировать», без молчаливого пересчёта.
Команда добавляется только на общей форме и только при наличии подсистемы вариантов отчётов:
&После("ПриСозданииНаСервере")
Процедура Отф_ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка)
Если Форма.ИмяФормы <> "ОбщаяФорма.ФормаОтчета" Тогда
Возврат;
КонецЕсли;
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
Возврат;
КонецЕсли;
Если Не Отф_Сервер.ДоступнаОтправкаНаFtp() Тогда
Возврат;
КонецЕсли;
Команда = Форма.Команды.Добавить("Отф_ОтправитьНаFtp");
Команда.Заголовок = НСтр("ru = 'Отправить на FTP'");
Команда.Действие = "Отф_Клиент.ОтправитьТекущийОтчет";
ОтчетыСервер.ВывестиКоманду(Форма, Команда, "Интеграция");
КонецПроцедуры
Дата в имени файла — момент успешного формирования, не нажатие кнопки:
&После("ПослеФормирования")
Процедура Отф_ПослеФормирования(ФормаОтчета, ОтчетСформирован)
Если ОтчетСформирован = Истина Тогда
ФормаОтчета.Отф_ДатаСоставления = ОбщегоНазначенияКлиент.ДатаСеанса();
Иначе
ФормаОтчета.Отф_ДатаСоставления = '00010101';
КонецЕсли;
КонецПроцедуры
Открыть любой отчёт в общей форме, сформировать, нажать Отправить на FTP (это не «Экспортировать результат отчета» в сервис рассылок). На FTP должен появиться файл вида Продажи_по_клиентам_20260821143705.xlsx.

Пример для выгрузки на сервер
Нам нужно записать уже готовый табличный документ во временный .xlsx и отдать его платформенным FTPСоединение. Соединение каждый раз читается из регистра заново — смена адреса в настройках попадает в следующую отправку.
ИмяФайла = Отф_КлиентСервер.ИмяФайлаВыгрузки(НазваниеОтчета, ДатаСоставления);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
ТабличныйДокумент.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLSX);
Соединение = НовоеСоединениеFtp(Параметры);
Каталог = Отф_КлиентСервер.НормализоватьКаталогFtp(Параметры.Каталог);
Соединение.УстановитьТекущийКаталог(Каталог);
Соединение.Записать(ИмяВременногоФайла, ИмяФайла);
Имя файла: пробелы → _, затем ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла. Пассивный режим включён в коде, таймаут 15 секунд. Если в настройках включён FTPS, в конструктор уходит ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(). При ошибке TLS обычный FTP не подставляется.
Пустой результат, одна шапка без строк данных или чистый график без ячеек на FTP не уходят — на форме остаётся причина отказа, кнопка на месте.
Альтернатива
Альтернативой может быть типовая РассылкаОтчетов и доставка на FTP-ресурс. Но это другой сценарий: заранее настроенная рассылка, повторная компоновка, без FTPS в штатной доставке. Для «отправить то, что сейчас на форме» она не закрывает задачу.
Важное дополнение
- Пароль хранится в безопасном хранилище (владелец
"Отф_Подключение"). После записи на форму открытым текстом не возвращается, в журнал и сообщения не попадает.
Протестировано на «Управление нашей фирмой», редакция 3.0.12.146 (БСП 3.1.11).
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.11.466
Вступайте в нашу телеграмм-группу Инфостарт