Перейти к содержимому

Как выбрать файл

  • автор:

Как выбрать файл

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

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Если ДиалогОткрытияФайла.Выбрать() Тогда
СтароеПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
ДиалогОткрытияФайла = Неопределено;
ПереместитьФайл(СтароеПолноеИмяФайла, НовоеПолноеИмяФайла);
КонецЕсли;

Получаю ошибку: Ошибка совместного доступа к файлу.
Получается метод ДиалогОткрытияФайла.Выбрать() блокирует файл.
Как решить эту проблему?

Либо прав нет, либо кто-то ещё его держит

1 Проверь уровень доступа к файлу
(Если нет прав можно получить их
FSO = Новый COMОбъект(«Scripting.FileSystemObject»);
FileFSO = FSO.GetFile(ИмяФайлаПриемника); FileFSO.Attributes=0;)

2 КопироватьФайл(ИмяФайлаИсточника, ИмяФайлаПриемника);

Права есть. файл доступен для удаления до вызова
ДиалогОткрытияФайла.Выбрать()
Блокировка снимается только после закрытия сессии 1С.

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Если ДиалогОткрытияФайла.Выбрать() Тогда
СтароеПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
ДиалогОткрытияФайла = Неопределено;
FSO = Новый COMОбъект(«Scripting.FileSystemObject»);
FileFSO = FSO.GetFile(ФайлПользователяПолноеИмя);
FileFSO.Attributes=0;
ПереместитьФайл(СтароеПолноеИмяФайла, НовоеПолноеИмяФайла);
КонецЕсли;

Что это дает?
Проблема осталась.

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Если ДиалогОткрытияФайла.Выбрать() Тогда
СтароеПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
ДиалогОткрытияФайла = Неопределено;
FSO = Новый COMОбъект(«Scripting.FileSystemObject»);
FileFSO = FSO.GetFile(СтароеПолноеИмяФайла);
FileFSO.Attributes=0;
ПереместитьФайл(СтароеПолноеИмяФайла, НовоеПолноеИмяФайла);
КонецЕсли;

Что это дает?
Проблема осталась.

>Получается метод ДиалогОткрытияФайла.Выбрать() блокирует файл.

настроить Process Monitor и посмотреть что происходит

Если ДиалогОткрытияФайла.Выбрать() Тогда
СтароеПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
ДиалогОткрытияФайла = Неопределено;

Process Monitor это https://ru.wikipedia.org/wiki/FileMon ?
(8) нету уже давно никакого filemon
(7) В полном коде у меня примерно так и есть.
Не то.

(3) Выбрать() ни чего не блокирует. Просто у тебя там вокруг еще какой-то код есть, который ты не показываешь и который, собственно, виноват в просиходящем

ПереместитьФайл() за конструкцию Выбрать(), не?
(12) ОК. Сейчас попробую выполнить краткий пример.
(13) Да. Удаление файлов у меня отложено до других событий.
смотри код, у меня всё рабоатет, только я вот это
(+17) ДиалогОткрытияФайла = Неопределено; — закомментировал
(+18) да оно даже и не имеет значения.

(12) Выполнил тестовый пример.

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Если ДиалогОткрытияФайла.Выбрать() Тогда // при этом блокирует выбранный файл
СтароеПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
ДиалогОткрытияФайла = Неопределено;
КонецЕсли;
НовоеПолноеИмяФайла = СокрЛП(Константы.КаталогОбщихФайлов.Получить()) + «\1.jpg»;
ПереместитьФайл(СтароеПолноеИмяФайла, НовоеПолноеИмяФайла);

Действительо работает!
Буду дальше смотреть что его блокирует.
По результату отпишу.
Всем спасибо.

Опытным путем установил что блокировка файла происходит при выполнении
ДиалогОткрытияФайла.Выбрать()
если установлено свойство
ДиалогОткрытияФайла.ПредварительныйПросмотр = Истина;

Релиз 8.3 (8.3.5.1517)
Возникает вопрос как совместить предварительный просмотр при открытии файла и отсутствие блокировки для последующего перемещения выбранного файла.

(21) возможно, у тебя в проводнике включено окно автопросмотра. Позакрывай все окна с расположением твоего файла и смотри на его перемещение, например, через TotalCommander.

(23) Именно так. Включено окно автопросмотра. Файл блокируется в момент отображения в окне предпросмотра.

(24) я про другое, если открыта папка (не из 1С, а просто так с винды) с твоим файлом и в ней указан автопросмотр, то он блокирует твой файл, даже если ничего не показывает.
Признак сей бороды у (17) работает, правда он не указал версию 1С (на 8.2 работает без проблем и с автопросмотром и без оного)

Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn

Как выбрать файл для загрузки и сохранить его?

Веб приложение на Flutter использует библиотеку ResumableJS для загрузки файлов на сервер. Да, это не самое простое решение, но так нужно. При выборе файла (как правило — изображения) необходимо показать его в интерфейсе приложения перед отправкой. Однако я не могу получить сам файл картинки в коде Flutter, не понимаю, как его вытащить из методов библиотеки и сконвертировать в файл любого пригодного формата. Вот код в моем index.html

  

Хочу обратить внимание, что сама загрузка файлов работает хорошо, без проблем и сбоев. Вот как я работаю с библиотекой в dart коде, чтобы получить событие fileAdded:

html.document.on["uploadedFile"].listen((html.Event event) < var res = (event as html.CustomEvent).detail; var res1 = Map.from(res); var reet = res1.values.first; final reader = html.FileReader(); reader.readAsText(reet); setState(() < image = Image.memory(reet); >); print(res1.toString()); >); 

Моя проблема в том, что не получается вытащить файл из ответа и сконвертировать его для нужного виджету формата. Выдает ошибку

Uncaught Error: Expected a value of type 'Uint8List', but got one of type 'File$ 

Для начинающих: как выбрать файл в 1С?

Добавим новую форму с кнопкой, нажав на которую будет открываться окно выбора файла. Дальнейшая обработка файла в данном примере не рассматривается. Рекомендуется тренироваться на копии базы или пустой конфигурации. Пример создан на конфигурации 1С:CRM 3.0.

Сначала подготовим конфигуратор.

Заходим в конфигуратор 1С. Если конфигурация не открыта, открываем ее и снимаем с поддержки. В меню «Конфигурация» нажимаем «Открыть конфигурацию». Далее в меню «Конфигурация» нажимаем «Поддержка» и выбираем «Настройка поддержки». В окне нажимаем кнопку «Включить возможность изменения» и устанавливаем переключатели как на картинке. Нажимаем «Ок».

Теперь создадим простую обработку.

Находим в левой таблице объектов объект «Обработки», нажимаем на ней правой кнопкой мыши и выбираем «Добавить». Далее потребуется заполнить Имя обработки, указать, в какой подсистеме 1С хотите вызвать обработку, и добавить новую форму в разделе «Формы».

После создания формы появится окно как представлено ниже.

Теперь создадим команду формы «Загрузить» нажав на плюс в верхнем правом окне. Обязательно укажите свойство «Действие». Это будет название процедуры 1С.

Далее добавляем на форму кнопку «Загрузить», нажав на плюс в левом верхнем окне. Обязательно укажите свойство «ИмяКоманды». Здесь укажем название команды, которую создали на предыдущем шаге «Загрузить». В результате на форме появится кнопка «Загрузить».

Далее напишем небольшой код.

Внизу окна нажимаем на закладку «Модуль». У нас здесь уже есть пустая процедура. Добавляем в нее код.

ДиалогВыбора = новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбора.Заголовок = «Выберите файл»;

Если ДиалогВыбора.Выбрать() Тогда

В результате получится так как на рисунке ниже.

И в конце остается проверить в пользовательском режиме. Для этого нажимаем «Начать отладку» или F5. Конфигуратор спросит обновить ли конфигурацию базы данных. Отвечаем «Да» и у нас открывается 1С (режим пользователя). Далее находим подсистему, куда добавили обработку (в нашем случае это «Маркетинг») и проверяем.

На простейшем примере было показано как написать код, прикрепить его на форму и вызвать в пользовательском режиме 1С.

Как выбрать файл

Добрый день, подскажите макрос, чтобы при нажатии кнопки на своей панели инструментов, появлялось окошко в котором я бы выбирал нужный файл и из него брались данные, точнее из нужных мне листо и ячеек и вставлялись в рабочую книгу?

Сообщений: 60940 Регистрация: 14.09.2012
Контакты см. в профиле
24.02.2011 13:29:24
Loard_Guru, перечитайте свой вопрос и задумайтесь — сможет ли кто-нибудь дать Вам корректный ответ?
Loard_Guru
24.02.2011 13:57:47

Function GetFilePath(Optional ByVal Title As String = «Выберите файл для загрузки», _
Optional ByVal InitialPath As String = «D:\Планирование\График пр блоки\», _
Optional ByVal FilterDescription As String = «Книги Excel», _
Optional ByVal FilterExtention As String = «*.xlsx*») As String
‘ функция выводит диалоговое окно выбора файла с заголовком Title,
‘ начиная обзор диска с папки InitialPath
‘ возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора
‘ для фильтра можно указать описание и расширение выбираемых файлов
On Error Resume Next
With Application.FileDialog(msoFileDialogOpen)
.ButtonName = «Выбрать»: .Title = Title: .InitialFileName = InitialPath
.Filters.Clear: .Filters.Add FilterDescription, FilterExtention
If .Show <> -1 Then Exit Function
GetFilePath = .SelectedItems(1): PS = Application.PathSeparator
End With
End Function

Sub OpenFile_()
ИмяФайла = GetFilePath(, «D:\Планирование\График пр блоки\», , «*.*») ‘ запрашиваем имя файла
‘ ===================== другие варианты вызова функции =====================
‘ текстовые файлы, стартовая папка не указана
‘ ИмяФайла = GetFilePath(«Выберите текстовый файл», , «Текстовые файлы», «*.txt»)
‘ файлы любого типа из папки «C:\Windows»
‘ ИмяФайла = GetFilePath(, «C:\Windows», , «*»)
‘ ============================================================ ­==============

If ИмяФайла = «» Then Exit Sub ‘ выход, если пользователь отказался от выбора файла
‘ MsgBox «Выбран файл: » & ИмяФайла, vbInformation
End Sub
Вот я сделал макрос чтобы выбирать файл, а как дальше продолжить макрос, чтобы в выбранном файле брались данные из нужны листов и из нужных ячеек, и вставлялись в другую книгу?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *