Перемещения файла в каталог |
Я |
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
И эти люди неспособные к обучению, занимаются автоматизацией… капец.
Ошибки под LINUX |
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 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’ : Ошибка доступа к файлу -
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
я не совсем поняла, доступа нет к какому файлу? к тому что на сервере или на машине?