Как реализовать перетаскивание файлов из Проводника в таблицу 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При разработке обработок и документов в 1С часто возникает задача прикрепления файлов (например, фотографий физических лиц или сканов документов) простым перетаскиванием мыши из Проводника Windows напрямую в таблицу формы. Рассмотрим, как правильно настроить свойства элементов управляемой формы и написать обработчики событий для поддержки механизма Drag-and-Drop.

Шаг 1. Настройка свойств элемента формы

Для того чтобы таблица формы могла принимать перетаскиваемые файлы из операционной системы, необходимо предварительно настроить свойства таблицы в редакторе формы:

  1. В палитре свойств элемента таблицы найдите и установите свойство Разрешить перетаскивание в значение Истина.
  2. Настройте свойство Способ перетаскивания файлов. Выберите КакФайл (передаются данные самого файла) или КакСсылкуНаФайл (передается путь к файлу в ОС) в зависимости от требований решаемой задачи.

Шаг 2. Настройка событий таблицы

Разберем основные события таблицы формы, отвечающие за процесс перетаскивания:

  1. ПроверкаПеретаскивания — вызывается при наведении курсора с зажатым файлом на таблицу. Здесь мы проверяем, можно ли сбросить файл в данное место, и разрешаем операцию.
  2. Перетаскивание — вызывается в момент, когда пользователь отпускает клавишу мыши над целевой строкой.

Шаг 3. Написание кода обработчиков событий

Проанализируем пример кода для клиентской части формы. В событии ПроверкаПеретаскивания мы отключаем стандартную обработку платформы и указываем действие копирования:


&НаКлиенте
Процедура ТаблицаФизЛицПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
    
    СтандартнаяОбработка = Ложь;
    ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование;
    
КонецПроцедуры

Далее разберем процедуру Перетаскивание, которая получает сброшенный файл и обрабатывает его для привязки к конкретной строке справочника или таблицы значений:


&НаКлиенте
Процедура ТаблицаФизЛицПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
    
    СтандартнаяОбработка = Ложь;
    
    // Проверяем, что файл перетащен на конкретную строку таблицы
    Если Строка = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Получаем путь к перетащенному файлу из параметров
    ИмяФайла = ПараметрыПеретаскивания.Значение.ПолноеИмя;
    ФайлИсточник = Новый Файл(ИмяФайла);
    
    Если Не ФайлИсточник.Существует() Тогда
        Возврат;
    КонецЕсли;
    
    // Получаем текущие данные целевой строки таблицы
    ТекущиеДанные = Элементы.ТаблицаФизЛиц.ДанныеСтроки(Строка);
    
    // Пример сохранения пути к файлу или помещения его в хранилище
    ТекущиеДанные.ИмяФайла = ФайлИсточник.Имя;
    ТекущиеДанные.ПутьКФайлу = ФайлИсточник.ПолноеИмя;
    
    Сообщить("Файл " + ФайлИсточник.Имя + " успешно прикреплен!");
    
КонецПроцедуры

Сохранение файла в базу данных

Если требуется записать двоичные данные файла непосредственно в информационную базу (например, в реквизит типа ХранилищеЗначения), необходимо выполнить поместить файл во временное хранилище на клиенте и передать полученный адрес на сервер:

  1. На клиенте получаем адрес во временном хранилище с помощью функции помещения файла.
  2. Передаем полученный адрес и ссылку на физическое лицо (или идентификатор строки) в серверную процедуру.
  3. На сервере считываем данные из хранилища с помощью ПолучитьИзВременногоХранилища() и записываем их в реквизит объекта.

Важные особенности и возможные проблемы

Выясним частые причины, по которым перетаскивание файлов из Проводника может не работать:

← На главную