Ошибка при вызове метода контекста переместить файл

Перемещения файла в каталог

Я
   Luffy

25.02.16 — 06:54

Подскажите, как можно этот файл: 3811038226_40703810718350000185__3811038226_40703810718350000185_001.y01, из любого места, по нажатию на кнопку, программно переместить в КаталогВременныхФайлов()?

   Рэйв

1 — 25.02.16 — 07:00

Можно. Но нужно знать полный путь к нему

   Luffy

2 — 25.02.16 — 07:01

(1) А можно его получить без ДиалогВыбораФайла?

   Провинциальный 1сник

3 — 25.02.16 — 07:03

Понятие «из любого места» требует уточнения. Имеется ли в виду диски локального компьютера или же сетевой ресурс? С локальными дисками можно устроить рекурсивный перебор каталогов прямо из 1с, но это достаточно долгий процесс.

   Рэйв

4 — 25.02.16 — 07:04

(2)Можно просто указать строкой

например

Командасистемы(«copy <полное имя файла> «+КаталогвременныхФайлов());

   Рэйв

5 — 25.02.16 — 07:05

ну и если переместить, а не скопировать то потом

КомандаСистемы(«del /Q <полное имя файла>»)

   Luffy

6 — 25.02.16 — 07:06

(3) Да из локалки, рабочий стол, диски С,D и т.д

   Luffy

7 — 25.02.16 — 07:07

(5) Интересно сейчас попробую, отпишусь

   forforumandspam

8 — 25.02.16 — 07:11

(4) А чем стандартная команда не устраивает? КомандаСистемы будет моргать черным экраном и возвращать фокус куда попало.

Глобальный контекст.УдалитьФайлы (Global context.DeleteFiles)

Глобальный контекст (Global context)

УдалитьФайлы (DeleteFiles)

Синтаксис:

УдалитьФайлы(<Путь>, <Маска>)

Параметры:

<Путь> (обязательный)

Тип: Строка.

Путь к удаляемым файлам.

<Маска> (необязательный)

Тип: Строка.

Маска для выбора удаляемых файлов. В строке маски допускается использование символа «*» (звездочка), обозначающего любое число произвольных символов, и «?» (знак вопроса), обозначающего один произвольный символ.

Если <Маска> не указана, то удаляются все файлы и каталог <Путь>.

Описание:

Удаляет указанные файлы.

   forforumandspam

9 — 25.02.16 — 07:12

Ну и

Глобальный контекст.КопироватьФайл (Global context.FileCopy)

Глобальный контекст (Global context)

КопироватьФайл (FileCopy)

Синтаксис:

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

   Рэйв

10 — 25.02.16 — 07:12

(8)лень искать было:-)

   Luffy

11 — 25.02.16 — 09:07

Блин, а что делать в этом случае?

{Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (КопироватьФайл)

    КопироватьФайл(ЗагрузкаФайла,КаталогВременныхФайлов);

по причине:

Ошибка копирования файлов

по причине:

Ошибка копирования файлов из ‘D:Base-1CРазработка3811038226_40703810718350000185__3811038226_40703810718350000185_001 — копия.y01’ в ‘D:Банк’ : Ошибка доступа к файлу

   ДенисЧ

12 — 25.02.16 — 09:07

Дать права на каталоги не предлагать?

   Luffy

13 — 25.02.16 — 09:09

(12) где в 1с, или сис.админить?

   Lexey_

14 — 25.02.16 — 09:10

(8), (9) а чем ПереместитьФайл() не устраивает?)

   Luffy

15 — 25.02.16 — 09:12

(14) Щас испытаю)

   Luffy

16 — 25.02.16 — 09:19

(14) Пипец

{Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (ПереместитьФайл)

    ПереместитьФайл(ЗагрузкаФайла,КаталогВременныхФайлов);

по причине:

Ошибка переименования файлов

по причине:

Неправильный путь к файлу ‘D:Банк’

   Luffy

17 — 25.02.16 — 09:21

Вот код

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

                                                          
    ДиалогФыбораФайла.Фильтр                        =    «Файлы (*.y01)|*.y01»;

    ДиалогФыбораФайла.Заголовок                        =    «Выберите файл»;

    ДиалогФыбораФайла.ПредварительныйПросмотр        =    Ложь;

    ДиалогФыбораФайла.Расширение                    =    «y01»;

    ДиалогФыбораФайла.ИндексФильтра                    =    0;

    ДиалогФыбораФайла.ПолноеИмяФайла                =    ЗагрузкаФайла;

    ДиалогФыбораФайла.ПроверятьСуществованиеФайла    =    ПроверятьСуществование;

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

        ЗагрузкаФайла = ДиалогФыбораФайла.ПолноеИмяФайла;

    КонецЕсли;

    //КаталогВременныхФайлов = КаталогВременныхФайлов() + «UploadFF»;

    КаталогВременныхФайлов = «D:Банк»;

    ПереместитьФайл(ЗагрузкаФайла,КаталогВременныхФайлов);

    ИмяФайла = УдаленияИзИмениФайла(ЗагрузкаФайла);

    ЗагрузкаФайла = ИмяФайла;

   Lexey_

18 — 25.02.16 — 09:23

(17) читай до дыр в СП про ПереместитьФайл

   Luffy

19 — 25.02.16 — 09:29

(18) Все разобрался, в конце пути нужно было ИмяФайла

КаталогВременныхФайлов = «D:Банк»+УдаленияИзИмениФайла(ЗагрузкаФайла);

    ПереместитьФайл(ЗагрузкаФайла,КаталогВременныхФайлов);

    ИмяФайла = УдаленияИзИмениФайла(ЗагрузкаФайла);

    ЗагрузкаФайла = ИмяФайла;

А у меня, как раз функция чистит путь к файлу до имени файла

Функция УдаленияИзИмениФайла(Знач Стр, РазделительИмениФайла=»»)

    
    Если РазделительИмениФайла = «» Тогда

        Стр = СокрЛП(Стр);

        Пока 1 = 1 Цикл

            Поз = Найти(Стр, РазделительИмениФайла);

            Если Поз = 0 Тогда

                Возврат Стр;

            КонецЕсли;

            //Стр = (Лев(Стр, Поз — 1));

            ДлинаРазделителя = СтрДлина(РазделительИмениФайла);

            Стр = Сред(Стр, Поз + ДлинаРазделителя);

        КонецЦикла;

    КонецЕсли;

    
КонецФункции

Всем большое спасибо))

   DDwe

20 — 25.02.16 — 09:30

(18) Не умеют они не думать ни читать.

  

DDwe

21 — 25.02.16 — 09:31

И эти люди неспособные к обучению, занимаются автоматизацией… капец.

Evgeniya
23.04.2014 13:00 Прочитано: 6000

Добрый день, коллеги!

Обмен данными 1С 8,2 и ВМС
Ошибка выскакивает при ручном запуске обработки «Обмен данными», проблема файлы застряли в корне каталога, ни туда, ни суда не идут.

Выгрузка данных для узла WMS
{Обработка.АХ_ОбменДаннымиСWMS.МодульОбъекта(273)}:

Ошибка при вызове метода контекста (ПереместитьФайл): Ошибка переименования файлов: Ошибка копирования файлов : Ошибка доступа к файлу

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
25.04.2014 15:47 Ответ № 1

(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

@khorevaa

При вызове функции «ПереместитьФайл» Возникает следующая ошибка

Внешнее исключение (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

п.с.
Замена кода на две операции
КопироватьФайл
УдалитьФайлы

Решила проблему

@dmpas

/mnt/4726E0D171584E1C — а там что подключено?

@khorevaa



Copy link


Contributor


Author

@dmpas Да внешний жёсткий диск

@EvilBeaver

У меня диссонанс между путями вида /mnt/ и текстом ошибки «Win32 IO»

Это же линукс и моно? А какой именно моно по версии?

@pumbaEO

А разве перемещение в 1С перезаписывает существующий файл или каталог?

@khorevaa



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

@EvilBeaver

Попробуй на 5-й моно. У меня были случаи исправления всяких странных глюков с помощью обновления моно. И, кстати, вопрос @pumbaEO тоже актуален.

@AlexMasljukov

При вызове функции ПереместитьФайл(ПапкаСФайлами, ДругоеИмяПапкиСТемижеФайлами) ошибка:
Внешнее исключение (System.IO.FileNotFoundException): Файл ‘D:……….’ не найден.} (здесь полный путь существующей папки ПапкаСФайлами). Хотя папка по указанному пути существует и определяется командой НайтиФайлы().

Т.е., ошибка возникает при попытке переименования папки с файлами. Хотя в СП описание данной процедуры гласит:
Выполняет перемещение (переименование) указанного файла (папка же тоже файл, я так понимаю).

@Mr-Rm

Нет, в 1С переименование каталогов тоже не работает.

ИмяКаталога = "C:TempDir1";
КаталогНаДиске = Новый Файл(ИмяКаталога);
Если КаталогНаДиске.Существует() Тогда
	Сообщить("Каталог существует");
	ПереместитьФайл(ИмяКаталога, ИмяКаталога+"2");
КонецЕсли

получаем:
Каталог существует
и далее:
Ошибка при вызове метода контекста (ПереместитьФайл)
по причине:
Ошибка переименования файлов
по причине:
Неправильный путь к файлу ‘C:TempDir1’. Объект является каталогом

  1. Добрый день!возникла такая проблема с загрузкой файла. Есть центральная база,обмен данными идем с двумя другими,на одной из них при загрузке данных выдает сообщение( см.ниже) хотя выгрузка идет! 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’ : Ошибка доступа к файлу


  2. Элла

    Offline

    Элла
    Опытный в 1С

    Регистрация:
    19 фев 2013
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26

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

  3. Общий доступ открыт…он файл то выгружает в ту папку,но не может чтото сделать с загрузкой…
    просто в папку Exchange захожу и нормально


  4. Dmitriy_76

    Offline

    Dmitriy_76
    Опытный в 1С
    Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.224
    Симпатии:
    15
    Баллы:
    29

    ну а в паку : C:Documents and SettingsОбмен_РИБLocal SettingsTemp1ПолныйМагистральная как заходишь ?

  5. это локальная папка на серваке,просто заходит и все,а и кстати когда захожу просто в Exchange и хочу копировать,пишет сетевое имя более не доступно


  6. Tiger86

    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, проверьте адрес

  7. \192.168.10.2ExchangeMessage_111_333.zip — это папка на др.сервере(общий доступ) с которой качаются файлы для обмена… вон этот файл: Message_111_333.zip по идее должен копировать в C:Documents and SettingsОбмен_РИБLocal SettingsTemp1ПолныйМагистральная и там как то делает в .xml


  8. Tiger86

    Offline

    Tiger86
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104

    я не совсем поняла, доступа нет к какому файлу? к тому что на сервере или на машине?


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник
Рис.3 Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста перейтипонавигационнойссылке
  • Ошибка при вызове метода контекста параметрыработыклиентапризапуске
  • Ошибка при вызове метода контекста открытьформу объект не найден
  • Ошибка при вызове метода контекста открытьформу неизвестное имя формы
  • Ошибка при вызове метода контекста открытьформу недостаточно прав