Перемещения файла в каталог |
Я |
25.02.16 — 06:54
Подскажите, как можно этот файл: 3811038226_40703810718350000185__3811038226_40703810718350000185_001.y01, из любого места, по нажатию на кнопку, программно переместить в КаталогВременныхФайлов()?
1 — 25.02.16 — 07:00
Можно. Но нужно знать полный путь к нему
2 — 25.02.16 — 07:01
(1) А можно его получить без ДиалогВыбораФайла?
3 — 25.02.16 — 07:03
Понятие «из любого места» требует уточнения. Имеется ли в виду диски локального компьютера или же сетевой ресурс? С локальными дисками можно устроить рекурсивный перебор каталогов прямо из 1с, но это достаточно долгий процесс.
4 — 25.02.16 — 07:04
(2)Можно просто указать строкой
например
Командасистемы(«copy <полное имя файла> «+КаталогвременныхФайлов());
5 — 25.02.16 — 07:05
ну и если переместить, а не скопировать то потом
КомандаСистемы(«del /Q <полное имя файла>»)
6 — 25.02.16 — 07:06
(3) Да из локалки, рабочий стол, диски С,D и т.д
7 — 25.02.16 — 07:07
(5) Интересно сейчас попробую, отпишусь
8 — 25.02.16 — 07:11
(4) А чем стандартная команда не устраивает? КомандаСистемы будет моргать черным экраном и возвращать фокус куда попало.
Глобальный контекст.УдалитьФайлы (Global context.DeleteFiles)
Глобальный контекст (Global context)
УдалитьФайлы (DeleteFiles)
Синтаксис:
УдалитьФайлы(<Путь>, <Маска>)
Параметры:
<Путь> (обязательный)
Тип: Строка.
Путь к удаляемым файлам.
<Маска> (необязательный)
Тип: Строка.
Маска для выбора удаляемых файлов. В строке маски допускается использование символа «*» (звездочка), обозначающего любое число произвольных символов, и «?» (знак вопроса), обозначающего один произвольный символ.
Если <Маска> не указана, то удаляются все файлы и каталог <Путь>.
Описание:
Удаляет указанные файлы.
9 — 25.02.16 — 07:12
Ну и
Глобальный контекст.КопироватьФайл (Global context.FileCopy)
Глобальный контекст (Global context)
КопироватьФайл (FileCopy)
Синтаксис:
КопироватьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>)
10 — 25.02.16 — 07:12
(8)лень искать было:-)
11 — 25.02.16 — 09:07
Блин, а что делать в этом случае?
{Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (КопироватьФайл)
КопироватьФайл(ЗагрузкаФайла,КаталогВременныхФайлов);
по причине:
Ошибка копирования файлов
по причине:
Ошибка копирования файлов из ‘D:Base-1CРазработка3811038226_40703810718350000185__3811038226_40703810718350000185_001 — копия.y01’ в ‘D:Банк’ : Ошибка доступа к файлу
12 — 25.02.16 — 09:07
Дать права на каталоги не предлагать?
13 — 25.02.16 — 09:09
(12) где в 1с, или сис.админить?
14 — 25.02.16 — 09:10
(8), (9) а чем ПереместитьФайл() не устраивает?)
15 — 25.02.16 — 09:12
(14) Щас испытаю)
16 — 25.02.16 — 09:19
(14) Пипец
{Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (ПереместитьФайл)
ПереместитьФайл(ЗагрузкаФайла,КаталогВременныхФайлов);
по причине:
Ошибка переименования файлов
по причине:
Неправильный путь к файлу ‘D:Банк’
17 — 25.02.16 — 09:21
Вот код
ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогФыбораФайла.Фильтр = «Файлы (*.y01)|*.y01»;
ДиалогФыбораФайла.Заголовок = «Выберите файл»;
ДиалогФыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогФыбораФайла.Расширение = «y01»;
ДиалогФыбораФайла.ИндексФильтра = 0;
ДиалогФыбораФайла.ПолноеИмяФайла = ЗагрузкаФайла;
ДиалогФыбораФайла.ПроверятьСуществованиеФайла = ПроверятьСуществование;
Если ДиалогФыбораФайла.Выбрать() Тогда
ЗагрузкаФайла = ДиалогФыбораФайла.ПолноеИмяФайла;
КонецЕсли;
//КаталогВременныхФайлов = КаталогВременныхФайлов() + «UploadFF»;
КаталогВременныхФайлов = «D:Банк»;
ПереместитьФайл(ЗагрузкаФайла,КаталогВременныхФайлов);
ИмяФайла = УдаленияИзИмениФайла(ЗагрузкаФайла);
ЗагрузкаФайла = ИмяФайла;
18 — 25.02.16 — 09:23
(17) читай до дыр в СП про ПереместитьФайл
19 — 25.02.16 — 09:29
(18) Все разобрался, в конце пути нужно было ИмяФайла
КаталогВременныхФайлов = «D:Банк»+УдаленияИзИмениФайла(ЗагрузкаФайла);
ПереместитьФайл(ЗагрузкаФайла,КаталогВременныхФайлов);
ИмяФайла = УдаленияИзИмениФайла(ЗагрузкаФайла);
ЗагрузкаФайла = ИмяФайла;
А у меня, как раз функция чистит путь к файлу до имени файла
Функция УдаленияИзИмениФайла(Знач Стр, РазделительИмениФайла=»»)
Если РазделительИмениФайла = «» Тогда
Стр = СокрЛП(Стр);
Пока 1 = 1 Цикл
Поз = Найти(Стр, РазделительИмениФайла);
Если Поз = 0 Тогда
Возврат Стр;
КонецЕсли;
//Стр = (Лев(Стр, Поз — 1));
ДлинаРазделителя = СтрДлина(РазделительИмениФайла);
Стр = Сред(Стр, Поз + ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции
Всем большое спасибо))
20 — 25.02.16 — 09:30
(18) Не умеют они не думать ни читать.
DDwe
21 — 25.02.16 — 09:31
И эти люди неспособные к обучению, занимаются автоматизацией… капец.
Evgeniya |
|
||
---|---|---|---|
|
Добрый день, коллеги!
Обмен данными 1С 8,2 и ВМС Выгрузка данных для узла WMS Ошибка при вызове метода контекста (ПереместитьФайл): Ошибка переименования файлов: Ошибка копирования файлов : Ошибка доступа к файлу |
Yandex |
|
||
---|---|---|---|
E_Migachev |
|
||
---|---|---|---|
(0) Evgeniya, проверьте права доступа к этим файлам и каталогам |
Подсказка: Для редактирования своего ответа щелкните по значку (справа) |
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account
Closed
khorevaa opened this issue
Nov 24, 2017
· 8 comments
Comments
При вызове функции «ПереместитьФайл» Возникает следующая ошибка
Внешнее исключение (System.IO.IOException): Win32 IO returned ERROR_ALREADY_EXISTS. Path: }
Контекст:
Версия движка
1Script Execution Engine. Version 1.0.18.35
Файл1 = "/mnt/4726E0D171584E1C/test_gitsync/test-gitsync/src/DataProcessors/ГрупповаяОбработкаСправочниковИДокументов/Forms/ФормаНастройки/Ext/Form/module"
Файл2 = "/mnt/4726E0D171584E1C/test_gitsync/test-gitsync/src/DataProcessors/ГрупповаяОбработкаСправочниковИДокументов/Forms/ФормаНастройки/Ext/Form/Module.bsl"
ПереместитьФайл(Файл1, Файл2);
Что не так? что делать?
@EvilBeaver @artbear @dmpas
п.с.
Замена кода на две операции
КопироватьФайл
УдалитьФайлы
Решила проблему
/mnt/4726E0D171584E1C
— а там что подключено?
Copy link
Contributor
Author
@dmpas Да внешний жёсткий диск
У меня диссонанс между путями вида /mnt/ и текстом ошибки «Win32 IO»
Это же линукс и моно? А какой именно моно по версии?
А разве перемещение в 1С перезаписывает существующий файл или каталог?
Copy link
Contributor
Author
@EvilBeaver Вот вывод версии
Mono JIT compiler version 4.2.1 (Debian 4.2.1.102+dfsg2-7ubuntu4)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
Попробуй на 5-й моно. У меня были случаи исправления всяких странных глюков с помощью обновления моно. И, кстати, вопрос @pumbaEO тоже актуален.
При вызове функции ПереместитьФайл(ПапкаСФайлами, ДругоеИмяПапкиСТемижеФайлами) ошибка:
Внешнее исключение (System.IO.FileNotFoundException): Файл ‘D:……….’ не найден.} (здесь полный путь существующей папки ПапкаСФайлами). Хотя папка по указанному пути существует и определяется командой НайтиФайлы().
Т.е., ошибка возникает при попытке переименования папки с файлами. Хотя в СП описание данной процедуры гласит:
Выполняет перемещение (переименование) указанного файла (папка же тоже файл, я так понимаю).
Нет, в 1С переименование каталогов тоже не работает.
ИмяКаталога = "C:TempDir1"; КаталогНаДиске = Новый Файл(ИмяКаталога); Если КаталогНаДиске.Существует() Тогда Сообщить("Каталог существует"); ПереместитьФайл(ИмяКаталога, ИмяКаталога+"2"); КонецЕсли
получаем:
Каталог существует
и далее:
Ошибка при вызове метода контекста (ПереместитьФайл)
по причине:
Ошибка переименования файлов
по причине:
Неправильный путь к файлу ‘C:TempDir1’. Объект является каталогом
-
Добрый день!возникла такая проблема с загрузкой файла. Есть центральная база,обмен данными идем с двумя другими,на одной из них при загрузке данных выдает сообщение( см.ниже) хотя выгрузка идет! 1с 8.2
Ошибка при копировании файла из \192.168.10.2ExchangeMessage_111_333.zip в C:Documents and SettingsОбмен_РИБLocal SettingsTemp1ПолныйМагистральнаяMessage_111_333.zip
Ошибка при вызове метода контекста (КопироватьФайл): Ошибка копирования файлов: Ошибка копирования файлов из ‘\192.168.10.2ExchangeMessage_111_333.zip’ в ‘C:Documents and SettingsОбмен_РИБLocal SettingsTemp1ПолныйМагистральнаяMessage_111_333.zip’ : Ошибка доступа к файлуТехническая информация:
{ОбщийМодуль.ПроцедурыОбменаДанными.Модуль(571)}: Ошибка при вызове метода контекста (КопироватьФайл): Ошибка копирования файлов: Ошибка копирования файлов из ‘\192.168.10.2ExchangeMessage_111_333.zip’ в ‘C:Documents and SettingsОбмен_РИБLocal SettingsTemp1ПолныйМагистральнаяMessage_111_333.zip’ : Ошибка доступа к файлу -
Offline
Элла
Опытный в 1С- Регистрация:
- 19 фев 2013
- Сообщения:
- 59
- Симпатии:
- 0
- Баллы:
- 26
Вроде написано — «Ошибка доступа к файлу»
Значит нужно проверить права доступа к расположению файлов тех пользователей, под которыми запускается 1С.
По крайнер мере это первое, что приходит в голову…. -
Общий доступ открыт…он файл то выгружает в ту папку,но не может чтото сделать с загрузкой…
просто в папку Exchange захожу и нормально -
Offline
Dmitriy_76
Опытный в 1С
Команда форума- Регистрация:
- 26 мар 2011
- Сообщения:
- 2.224
- Симпатии:
- 15
- Баллы:
- 29
ну а в паку : C:Documents and SettingsОбмен_РИБLocal SettingsTemp1ПолныйМагистральная как заходишь ?
-
это локальная папка на серваке,просто заходит и все,а и кстати когда захожу просто в Exchange и хочу копировать,пишет сетевое имя более не доступно
-
Offline
Tiger86
Модераторы
Команда форума
Модератор- Регистрация:
- 24 мар 2011
- Сообщения:
- 6.407
- Симпатии:
- 108
- Баллы:
- 104
папка то на серваке, а обращаетесь вы к ней с обычного рабочего компа?
вот так он ищет по адресу в сети у вас \192.168.10.2ExchangeMessage_111_333.zip, а так на конкретной машине на диске С — C:Documents and SettingsОбмен_РИБLocal SettingsTemp1ПолныйМагистральнаяMessage_111_333.zip, проверьте адрес
-
\192.168.10.2ExchangeMessage_111_333.zip — это папка на др.сервере(общий доступ) с которой качаются файлы для обмена… вон этот файл: Message_111_333.zip по идее должен копировать в C:Documents and SettingsОбмен_РИБLocal SettingsTemp1ПолныйМагистральная и там как то делает в .xml
-
Offline
Tiger86
Модераторы
Команда форума
Модератор- Регистрация:
- 24 мар 2011
- Сообщения:
- 6.407
- Симпатии:
- 108
- Баллы:
- 104
я не совсем поняла, доступа нет к какому файлу? к тому что на сервере или на машине?
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.