Как сделать Drag`n`drop между 1С и explorer`ом
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Разобрался, оказывается это событие "ПроверкаПеретаскивания"
Может будет интересно кому:
Может будет интересно кому:
////Отключаем стандартную обработку на этапе проверка перетаскивания (иначе просто откроет файл как текстовый)
&НаКлиенте
Процедура ФайлыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = ложь;
КонецПроцедуры
////В событии перетаскивание сохраняем полученный файл во временное хранилище
&НаКлиенте
Процедура ФайлыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = ложь;
НовыйФайл = Новый Файл(ПараметрыПеретаскивания.Значение.ПолноеИмя);
АдресФайла = "";
ПоместитьФайл(АдресФайла,ПараметрыПеретаскивания.Значение.ПолноеИмя,,Ложь);
КопируемФайлСервер(АдресФайла,ПараметрыПеретаскивания.Значение.Имя,ЭтаФорма.НашаКарта);
КонецПроцедуры
//// Ну а здесь я его сохраняю в закрытую от пользователей папку
Процедура КопируемФайлСервер(АдресФайла,ИмяФайла,НомерКарты)
Адрес = "C:\Users\TT\Desktop\UAZ_3163\"+НомерКарты+"\";
Файл = НайтиФайлы("C:\Users\TT\Desktop\UAZ_3163\",НомерКарты);
//// не уверен нужна ли эта проверка, ведь если уже есть такая папка, то ошибки это не вызывает
Если Файл.Количество() = 0 тогда
СоздатьКаталог("C:\Users\TT\Desktop\UAZ_3163\"+НомерКарты);
КонецЕсли;
НашФайл = ПолучитьИзВременногоХранилища(АдресФайла);
Файл = НайтиФайлы(Адрес+ИмяФайла);
ИмяФайлаБезрасширения = Лев(ИмяФайла,Найти(ИмяФайла,".")-1);
Расширение = Прав(ИмяФайла,СтрДлина(ИмяФайла) - Найти(ИмяФайла,".")+1);
//// Добавил уникальный индификатор к имени файла, чтоб юзеры не мучались переименованием файлов (ун. инд. это текущая секунда дня)
НашФайл.Записать(Адрес+ИмяФайлаБезрасширения+"_"+СтрЗаменить(Строка(Час(ТекущаяДата())*360 + Минута(ТекущаяДата())*60+ Секунда(ТекущаяДата())),Символы.НПП,"")+Расширение);
///Процедура считывает все файлы из текущей папки и заполняем ими список
ЗаполнениеСписка(Адрес);
КонецПроцедуры
Показать
(2)
В первом сообщении Вы пишите, что перетаскивать из 1с понятно. Когда это из 1с можно было перетаскивать на рабочий стол?
Во вторых, вы пишите одно, а по коду зачем то какие то папки создаете на сервере туда что то помещаете. Причем тут перетаскивание В 1С?
Кроме этого есть РаботаСФайлами.ДобавитьФайл - почему не используете?
И как в отлавливаете строку на которую наведена мышь?
ПоместитьФайл(АдресФайла,ПараметрыПеретаскивания.Значение.ПолноеИмя,,Ложь);
В первом сообщении Вы пишите, что перетаскивать из 1с понятно. Когда это из 1с можно было перетаскивать на рабочий стол?
Во вторых, вы пишите одно, а по коду зачем то какие то папки создаете на сервере туда что то помещаете. Причем тут перетаскивание В 1С?
Кроме этого есть РаботаСФайлами.ДобавитьФайл - почему не используете?
И как в отлавливаете строку на которую наведена мышь?
не пашет.......делаю в толстом клиенте, обычном приложении.........событие не генерируется....
перетаскиваю на табличноеполе, обработчики везде подключил. посмотрите, что не так в аттаче
перетаскиваю на табличноеполе, обработчики везде подключил. посмотрите, что не так в аттаче
Прикрепленные файлы:
МатрицаЗаказовБоржоми.epf
Чтобы перетащить файл из винды в 1с, нужно (УФ):
1) На форме 1с расположить объект формы, ему установить 2 галочки "разрешить начало перетаскивания" и "разрешить перетаскивание"
2) в этом же объекте обязательно прописать событие "проверка перетаскивания" - в нем прописать стандартную обработку = ложь
3) в этом же объекте обязательно прописать событие "перетаскивание" - в нем прописать стандартную обработку = ложь и дальше по коду разбирать перетаскиваемое чудо на предмет его происхождения. то, что мы перетаскиваем, находится в "ПараметрыПеретаскивания.Значение". Для случаев с файлом, это будет переменная типа "файл".
Учтите, что перетаскивать можно не только файлы и не только из винды, соседние оьъекты формы тоже могут обмениваться записями любых типов.
1) На форме 1с расположить объект формы, ему установить 2 галочки "разрешить начало перетаскивания" и "разрешить перетаскивание"
2) в этом же объекте обязательно прописать событие "проверка перетаскивания" - в нем прописать стандартную обработку = ложь
3) в этом же объекте обязательно прописать событие "перетаскивание" - в нем прописать стандартную обработку = ложь и дальше по коду разбирать перетаскиваемое чудо на предмет его происхождения. то, что мы перетаскиваем, находится в "ПараметрыПеретаскивания.Значение". Для случаев с файлом, это будет переменная типа "файл".
Учтите, что перетаскивать можно не только файлы и не только из винды, соседние оьъекты формы тоже могут обмениваться записями любых типов.
В своей конфигурации реализовал перетаскивание через папку на обменнике в виде формы ХТМЛ документа, у которой значение- строковый адрес папки на обменнике. Фактически файлы в 1С не прикрепляются и никак не обрабатываются, зато работать с ними очень быстро и удобно. Минусы - назойливые сообщения безопасности, которые лечатся настройками свйоств безопасности браузера в системе, а также при перетаскивании из одного окна проводника в 1С в другое, 1С-ка пытается открыть перетаскиваемый файл. При перетаскивании из внешнего проводника (и наоборот) такой проблемы нет. Может кто знает как запретить 1С-ке открывать перетаскиваемые файлы для формы целиком или для поля ХТМЛ документа?
Привет! Может кто-то увидит ;-) Уважаемые знатоки, подскажите начинающему: как написать реакцию на drag&drop картинки на html документе? если на него кликнуть - открывается системный просмотр картинок, если в 1С перетащить картинку - открывается вкладка с содержимым файла-картинки.
Здравствуйте! Подскажите что не так при перетаскивании просто отображается перечёркнутый кружок, платформа 8.3.13.1690, конфигурация Бухгалтерия предприятия, редакция 3.0 (3.0.70.52)? Может ещё где какие галки поставить надо?
Небольшое дополнение - если ходим копировать перетаскиванием не по одному файлу, а выделив несколько то кусок кода:
Надо заменить на:
НовыйФайл = Новый Файл(ПараметрыПеретаскивания.Значение.ПолноеИмя);
АдресФайла = "";
ПоместитьФайл(АдресФайла,ПараметрыПеретаскивания.Значение.ПолноеИмя,,Ложь);
КопируемФайлСервер(АдресФайла,ПараметрыПеретаскивания.Значение.Имя,ЭтаФорма.НашаКарта);
Надо заменить на:
Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда
Для Каждого ЭлементМасс Из ПараметрыПеретаскивания.Значение Цикл
НовыйФайл = Новый Файл(ЭлементМасс.ПолноеИмя);
АдресФайла = "";
ПоместитьФайл(АдресФайла,ЭлементМасс.ПолноеИмя,,Ложь);
КопируемФайлСервер(АдресФайла,ЭлементМасс.Имя,ЭтаФорма.НашаКарта);
КонецЦикла;
Иначе
НовыйФайл = Новый Файл(ПараметрыПеретаскивания.Значение.ПолноеИмя);
АдресФайла = "";
ПоместитьФайл(АдресФайла,ПараметрыПеретаскивания.Значение.ПолноеИмя,,Ложь);
КопируемФайлСервер(АдресФайла,ПараметрыПеретаскивания.Значение.Имя,ЭтаФорма.НашаКарта);
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот