1. Назначение
Обработка предназначена для организации удобного двустороннего обмена файлами между сервером 1С (файловым хранилищем, где выполняется серверный код) и локальным компьютером пользователя (клиентское приложение). Она позволяет просматривать содержимое каталогов, перемещаться по файловой системе, копировать файлы в обе стороны и удалять их без использования внешних инструментов (FTP, сетевые папки). Решение ориентировано на администраторов, разработчиков и пользователей, которым требуется оперативный перенос файлов (отчётов, выгрузок, шаблонов и др.) в среде 1С:Предприятие 8.
2. Интерфейс и состав формы
Форма обработки содержит две основные панели (табличные поля):
-
Левая панель («Файлы») – отображает содержимое текущего каталога на сервере.
-
Правая панель («ФайлыЛокальные») – отображает содержимое текущего каталога на клиенте.
Каждая панель представляет собой список файлов и каталогов с колонками:
-
Имя– имя элемента (файла или папки); -
ПолноеИмя– полный путь к элементу; -
Путь– путь без имени; -
Расширение– расширение файла (для каталогов – пусто); -
ЭтоКаталог– признак папки (булево); -
ЭтоКорень– признак корневого элемента (например, дискC:\).
На форме также присутствуют командные кнопки:
-
«СКлиентаНаСервер» – копирование выделенного файла с клиента на сервер.
-
«ССервераНаКлиент» – копирование выделенного файла с сервера на клиент.
-
«УдалитьНаКлиенте» – удаление выделенного файла на клиентской машине.
-
«УдалитьНаСервере» – удаление выделенного файла на сервере.
Скрытые реквизиты формы:
-
Путь– строка, хранящая текущий каталог на сервере (инициализируется при открытии какКаталогВременныхФайлов()). -
ПутьЛокальный– строка, хранящая текущий каталог на клиенте (также инициализируется какКаталогВременныхФайлов()). -
СписокДисковСервер,СписокДисковКлиент– таблицы значений для хранения доступных логических дисков (только для Windows).
3. Основные сценарии работы
3.1. Навигация по файловой системе
При открытии формы происходит автоматическое определение операционной системы на клиенте и на сервере. Для Windows определяются доступные диски (путём проверки существования A:\, B:\, … Z:\) и отображаются в виде корневых элементов. Для других ОС (Linux, macOS) диски не выводятся – корнем считается /.
В каждой панели:
-
При двойном клике по папке (или строке, где
ЭтоКаталог = Истина) происходит переход в выбранный каталог – обновляется соответствующий путь и список файлов. -
Если текущий путь – корень диска (например,
C:\), то вместо перехода на уровень выше отображается список всех доступных дисков (только Windows). -
Если текущий путь не корневой, то в списке присутствует элемент
..(две точки) для перехода в родительский каталог. При его выборе путь меняется на родительский, и список перестраивается. -
Сортировка списка: сначала отображаются корневые элементы (
ЭтоКорень = Истина), затем папки (ЭтоКаталог = Истина), затем файлы – по алфавиту.
3.2. Копирование с клиента на сервер
Пользователь выделяет файл (не каталог) в правой панели («ФайлыЛокальные») и нажимает кнопку «СКлиентаНаСервер». Алгоритм:
-
Считывается выбранный файл в двоичные данные
Новый ДвоичныеДанные(ПолноеИмя). -
Данные кодируются в строку Base64 через
Base64Строка(). -
Строка передаётся на серверную процедуру
СКлиентаНаСерверНаСервере()(вызов с передачей параметров). -
На сервере строка декодируется обратно в двоичные данные (
Base64Значение()) и сохраняется в текущем серверном каталоге (Путь) с тем же именем файла. При формировании полного пути корректно добавляется разделитель (\для Windows,/для других ОС) в зависимости от платформы сервера. -
После сохранения список файлов на сервере обновляется (
ОбновитьСписокФайлов()).
3.3. Копирование с сервера на клиент
Аналогично, но в обратном направлении: выделяется файл в левой панели («Файлы») и нажимается кнопка «ССервераНаКлиент». На сервере файл читается в двоичные данные, кодируется в Base64, строка передаётся клиенту, где декодируется и сохраняется в локальный каталог ПутьЛокальный с исходным именем. После сохранения обновляется клиентский список.
3.4. Удаление файлов
Для удаления файла (каталоги удалять нельзя – проверка ЭтоКаталог блокирует действие) пользователь выделяет файл в нужной панели и нажимает соответствующую кнопку удаления. Появляется диалог подтверждения (ПоказатьВопрос) с текстом: «Вы действительно хотите удалить <полное_имя_файла> ?». При подтверждении (ответ «Да») вызывается встроенная функция УдалитьФайлы() (для клиента – непосредственно в клиентском коде, для сервера – через серверную процедуру). После удаления список соответствующей панели обновляется.
4. Технические особенности реализации
-
Разделение клиент-сервер – все операции с файловой системой на сервере выполняются в серверных процедурах (с директивой
&НаСервере), на клиенте – в клиентских. Передача данных между сторонами осуществляется через параметры вызовов. -
Кодирование Base64 – используется для передачи содержимого файлов через вызовы сервера. Это обеспечивает универсальность (передаются любые типы данных – текст, изображения, двоичные файлы) и обходит ограничения на передачу двоичных данных напрямую. Однако метод неэффективен для очень больших файлов из-за увеличения размера строки (~на 33%) и ограничений платформы на длину строки (теоретически до 2 ГБ, практически – ограничения времени выполнения и памяти).
-
Кроссплатформенность – код адаптирован к Windows, Linux и macOS. Определение типа ОС выполняется через
СистемнаяИнформация.ТипПлатформы. Для Windows выводится список дисков, для Unix-подобных систем корневой каталог обозначается/. Разделители путей корректируются при формировании полных имён: используется проверка наличия символов\или/и соответствующая подстановка. -
Асинхронные диалоги – для подтверждения удаления используются оповещения (
ОписаниеОповещения), чтобы не блокировать клиентский интерфейс во время ожидания ответа пользователя. -
Обработка ошибок – явная обработка исключений не реализована, поэтому при отсутствии доступа к файлу или каталогу (например, недостаток прав) возникнет системное исключение. Предполагается, что пользователь имеет соответствующие права на чтение/запись/удаление в используемых каталогах.
5. Ограничения и возможные доработки
-
Размер передаваемых файлов – так как используется Base64, передача файлов размером более нескольких десятков мегабайт может привести к длительным блокировкам интерфейса или превышению допустимого размера строки. Рекомендуется использовать для файлов до 50–100 МБ.
-
Отсутствие индикации прогресса – при копировании нет визуального отображения хода выполнения, что может быть неудобно для больших файлов.
-
Отсутствие фильтрации по маске – в коде присутствует закомментированная переменная
Маска, но фактически используется маска"*"(все файлы). Если требуется ограничение по расширениям, необходимо доработать вызовНайтиФайлы(). -
Безопасность – нет проверки на перезапись существующих файлов при копировании (если файл с таким именем уже существует, он будет перезаписан без предупреждения). Также нет ограничений на выбор каталогов – пользователь может удалять любые файлы, к которым имеет доступ.
-
Работа с каталогами – удаление и копирование папок не поддерживается (только файлы), что ограничивает сценарии.
6. Заключение
Обработка представляет собой готовое интуитивно понятное решение для быстрого обмена файлами в среде 1С. Она может быть использована как самостоятельный инструмент или встроена в другие конфигурации для организации импорта/экспорта данных. Благодаря разделению клиентской и серверной частей, она корректно функционирует в файловом и клиент-серверном режимах работы, а также на различных операционных системах. При необходимости функциональность может быть расширена (добавление прогресс-бара, поддержка каталогов, маски фильтрации, предупреждение о перезаписи).
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.27.50
Вступайте в нашу телеграмм-группу Инфостарт