Копирование фала в указанный каталог

1. TopZlodey 13 29.11.18 10:37 Сейчас в теме
Здравствуйте, давно написал небольшой код для копирования выбранного файла в специальный каталог, в файловом варианте все отрабатывает чудесно но встал вопрос как это сделать на сервере?

Сам код:

Процедура ТЧЭскизДобавленияНаСервере(ПрисоединенныеФайлы,ИмяФайла)
	ТЧНоваяСтрока=Объект.ТЧЭскиз.Добавить();
	ТЧНоваяСтрока.Дата=ТекущаяДата();
	ТЧНоваяСтрока.Время=Формат(ТекущаяДата(),"ДЛФ=T");
	ТЧНоваяСтрока.Пользователь=Пользователи.ТекущийПользователь();
	ТЧНоваяСтрока.ПутьКФайлу=ПрисоединенныеФайлы;
	ТЧНоваяСтрока.ПрисоединенныеФайлы = ИмяФайла;
	СоздатьКаталог("\\1CSERVER\эскизы"+Объект.Покупатель.Наименование+"Заявка №"+Объект.Ссылка.Номер+" от "+Формат(Объект.Дата,"ДФ=dd.MM.yyyy"));
	КопироватьФайл(ПрисоединенныеФайлы,"\\1CSERVER\эскизы\Заявка №"+Объект.Ссылка.Номер+" от "+Формат(Объект.Дата,"ДФ=dd.MM.yyyy")+"\"+ИмяФайла);
	
КонецПроцедуры
Показать


Подскажите пожалуйста как нужно поправить, сейчас выходит ошибка (Во вложении).
Прикрепленные файлы:
+
По теме из базы знаний
Найденные решения
25. TopZlodey 13 30.11.18 10:09 Сейчас в теме
(23)
(15)

Как итог смог решить проблему переделав код следующим образом. Понимаю что не совсем правильно, но задача горит и как временное решение сгодиться:

&НаКлиенте
Процедура ТЧЭскизПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	СтандартнаяОбработка=Ложь;
	Отказ=Истина;
	
	СтандартнаяОбработка=ложь;
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выберите файл";
	Диалог.ПолноеИмяФайла = ""; 
    Диалог.МножественныйВыбор = Ложь;
	Диалог.Каталог = "F:\";
	Если Диалог.Выбрать() Тогда
		 

		ПрисоединенныеФайлы = Диалог.ПолноеИмяФайла;
		ВычисляемИмяФайла = СтрРазделить(ПрисоединенныеФайлы, "\", Ложь);
		ИмяФайла = ВычисляемИмяФайла.Количество();
		ИмяФайла = ВычисляемИмяФайла[Имяфайла-1];

	КонецЕсли;
	//Диалог.
	
	ТЧНоваяСтрока=Объект.ТЧЭскиз.Добавить();
	ТЧНоваяСтрока.Дата=ТекущаяДата();
	ТЧНоваяСтрока.Время=Формат(ТекущаяДата(),"ДЛФ=T");
	ТЧНоваяСтрока.Пользователь=ПользовательНаСервере ();
	ТЧНоваяСтрока.ПутьКФайлу=ПрисоединенныеФайлы;
	НаименованиеПокупателя=НаименованиеПокупателяНаСервере();
	НомерДокумента=НомерНаСервере ();
	ТЧНоваяСтрока.ПрисоединенныеФайлы = ИмяФайла;
	СоздатьКаталог("\\192.168.0.249\эскизы\"+НаименованиеПокупателя+"Заявка №"+НомерДокумента+" от "+Формат(Объект.Дата,"ДФ=dd.MM.yyyy"));
	КопироватьФайл(ПрисоединенныеФайлы,"\\192.168.0.249\эскизы\"+НаименованиеПокупателя+"Заявка №"+НомерДокумента+" от "+Формат(Объект.Дата,"ДФ=dd.MM.yyyy")+"\"+ИмяФайла);
	
	СтатусЭскизаПриИзмененииНаСервере()

КонецПроцедуры

Функция НаименованиеПокупателяНаСервере()
	Возврат Объект.Покупатель.Наименование;	
КонецФункции

Функция НомерНаСервере()
	Возврат Объект.Ссылка.Номер;	
КонецФункции


Функция ПользовательНаСервере ()
        Пользователь=Пользователи.ТекущийПользователь();
        Возврат Пользователь
КонецФункции
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. spacecraft 29.11.18 10:44 Сейчас в теме
(1) этот код к ошибке не имеет отношение. Посмотрите внимательно ошибку: "ТекущийЭлемент.ТекущийЭлемент.Имя".
+
5. TopZlodey 13 29.11.18 10:54 Сейчас в теме
(4)Ой, простите, это уже про то что в табличную часть ничего не записалось из за первой ошибки.
+
7. TopZlodey 13 29.11.18 10:57 Сейчас в теме
(4)вот
Прикрепленные файлы:
+
13. spacecraft 29.11.18 11:14 Сейчас в теме
(1) Учитывая, что процедура называется "ТЧЭскизДобавленияНаСервере", предполагаем что действие происходит на сервере. Доступ к шаре должно быть у пользователя, от чего имени запущен сам сервер1С.
Но в 1С есть возможность передавать файлы с клиента на сервер через ВременноеХранилище. На клиенте помещаете файл в хранилище, передаете адрес хранилища на сервер, на сервере получаете файл их хранилища и записываете куда хотите на самом сервере.
+
2. YannikAlx 43 29.11.18 10:41 Сейчас в теме
Попробуйте не использовать сетевые пути - пишите конкретно "C:\Путь\имяфайла.txt"
+
6. TopZlodey 13 29.11.18 10:55 Сейчас в теме
(2)Там получается нужно на локальных машинах пользователей которые будут запускать серверную 1С, а там названия дисков где располагается эта папка может быть много.
+
8. YannikAlx 43 29.11.18 11:00 Сейчас в теме
(6) Тем более если нужно на локальных машинах - зачем писать \\server\**************
Пропишите на локальных машинах одинаковые каталоги и сохраняйте в него
+
9. TopZlodey 13 29.11.18 11:03 Сейчас в теме
(8) Пытался прописать \\N\эскизы\**** Но проблема встала с тем что у одного пользователя встает как диск N а у другого к примеру D, поэтому и пытался через \\1cserver\Эскизы и \\192.168.0.249\эскизы
+
12. TopZlodey 13 29.11.18 11:09 Сейчас в теме
(8)Этот документ (в котором они как раз выбирают файл и могут его посмотреть) могут открывать разные пользователи на разных компьютерах, все они имеют доступ к этой общей папке расположенной на сервере и должны по итогу сохранять туда (просто пояснил)
+
3. YannikAlx 43 29.11.18 10:42 Сейчас в теме
И кроме того вам принципиально файл создавать на сервере , или может на клиенте конкретного пользователя делать?
+
10. user633533_encantado 11 29.11.18 11:03 Сейчас в теме
Если файл на сервере, то просто путь на сервере вида "C:\Путь\имяфайла.txt", если нужно сохранить на клиентской машине, то нужно дать пользователю указать куда сохранять.
+
11. TopZlodey 13 29.11.18 11:05 Сейчас в теме
(10)Пытался сделать так чтобы пользователь сам выбирал файл не важно откуда и он сохранялся в строго определенную общую папку, на фаловой базе на 1 компьютере с этим проблем нет...
+
14. antz 29.11.18 11:27 Сейчас в теме
(11) А зачем вообще это делать на сервере?
+
16. TopZlodey 13 29.11.18 11:28 Сейчас в теме
(14) Извините не понял вопроса.
+
17. antz 29.11.18 11:28 Сейчас в теме
(16) Зачем процедуру в (0) выполнять на сервере? Почему не копировать файл с клиента?
+
18. TopZlodey 13 29.11.18 11:31 Сейчас в теме
(17)
(15)
Все выглядит так:

&НаКлиенте
Процедура ТЧЭскизПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	СтандартнаяОбработка=Ложь;
	Отказ=Истина;

	СтандартнаяОбработка=ложь;
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выберите файл";
	Диалог.ПолноеИмяФайла = ""; 
    Диалог.МножественныйВыбор = Ложь;
	Диалог.Каталог = "F:\";
	Если Диалог.Выбрать() Тогда
		 

		ПрисоединенныеФайлы = Диалог.ПолноеИмяФайла;
		ВычисляемИмяФайла = СтрРазделить(ПрисоединенныеФайлы, "\", Ложь);
		ИмяФайла = ВычисляемИмяФайла.Количество();
		ИмяФайла = ВычисляемИмяФайла[Имяфайла-1];

	КонецЕсли;
	//Диалог.
	
	ТЧЭскизДобавленияНаСервере(ПрисоединенныеФайлы,ИмяФайла);

	
	СтатусЭскизаПриИзмененииНаСервере()

КонецПроцедуры


Процедура ТЧЭскизДобавленияНаСервере(ПрисоединенныеФайлы,ИмяФайла)
	ТЧНоваяСтрока=Объект.ТЧЭскиз.Добавить();
	ТЧНоваяСтрока.Дата=ТекущаяДата();
	ТЧНоваяСтрока.Время=Формат(ТекущаяДата(),"ДЛФ=T");
	ТЧНоваяСтрока.Пользователь=Пользователи.ТекущийПользователь();
	ТЧНоваяСтрока.ПутьКФайлу=ПрисоединенныеФайлы;
	ТЧНоваяСтрока.ПрисоединенныеФайлы = ИмяФайла;
	СоздатьКаталог("\\1CSERVER\эскизы"+Объект.Покупатель.Наименование+"Заявка №"+Объект.Ссылка.Номер+" от "+Формат(Объект.Дата,"ДФ=dd.MM.yyyy"));
	КопироватьФайл(ПрисоединенныеФайлы,"\\1CSERVER\эскизы\Заявка №"+Объект.Ссылка.Номер+" от "+Формат(Объект.Дата,"ДФ=dd.MM.yyyy")+"\"+ИмяФайла);
	
КонецПроцедуры

&НаКлиенте
Процедура ТЧЭскизПриАктивизацииСтроки(Элемент)
	Если Не Элемент.ТекущийЭлемент=Неопределено Тогда
	Если ТекущийЭлемент.ТекущийЭлемент.Имя="ТЧЭскизПрисоединенныеФайлы" Тогда      
		ТекущиеДанные=Элементы.ТЧЭскиз.ТекущиеДанные;
	 	НомерСтроки=ТекущиеДанные.НомерСтроки;
		ЗапуститьПриложение(Объект.ТЧЭскиз[НомерСтроки-1].ПутьКФайлу);
	КонецЕсли;
	КонецЕсли;
КонецПроцедуры
Показать
+
19. antz 29.11.18 11:34 Сейчас в теме
(18) Прекрасно, теперь мы знаем, как все выглядит) Так зачем копирование файла выполнять на сервере?
+
20. TopZlodey 13 29.11.18 11:37 Сейчас в теме
(19)Буду честен, встал вопрос, начитался в интернете, смог сделать и забыл на долгое время)
Так что сам не уверен, наверное можно и через клиент попробовать, только как это относится к моему вопросу?
+
21. antz 29.11.18 11:42 Сейчас в теме
(20) Ну, может с правами затык, а в (12) вы говорите, что у всех пользователей есть права на доступ к каталогу, а этих прав может не быть у пользователя, под которым 1с ходит на сервер.
Кстати, а нет ли в имени формируемого файла каких-нибудь запрещенных символов?
+
22. TopZlodey 13 29.11.18 11:47 Сейчас в теме
(21)Нет, с этим проблем быть не может, все проверялось в том числе на пользователе владеющим админскими правами на сервере/компьютере и 1С...
В имени тоже проблем нет, до этого тестировал все на файловой, игрался с именами и форматами.
+
23. antz 29.11.18 11:49 Сейчас в теме
(22) Ну там присутствует Покупатель.Наименование, вы на всех покупателях тестировали? Кто угодно запросто мог вкорячить в наименование какую-нибудь звездочку.

UPD А, вижу, вы просто решили перенести выполнение на сервер. Но зачем, если на клиенте работало?
+
24. TopZlodey 13 29.11.18 11:52 Сейчас в теме
(23)Да, проверял в том числе и на тех же покупателях что работали на файловой...
+
25. TopZlodey 13 30.11.18 10:09 Сейчас в теме
(23)
(15)

Как итог смог решить проблему переделав код следующим образом. Понимаю что не совсем правильно, но задача горит и как временное решение сгодиться:

&НаКлиенте
Процедура ТЧЭскизПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	СтандартнаяОбработка=Ложь;
	Отказ=Истина;
	
	СтандартнаяОбработка=ложь;
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выберите файл";
	Диалог.ПолноеИмяФайла = ""; 
    Диалог.МножественныйВыбор = Ложь;
	Диалог.Каталог = "F:\";
	Если Диалог.Выбрать() Тогда
		 

		ПрисоединенныеФайлы = Диалог.ПолноеИмяФайла;
		ВычисляемИмяФайла = СтрРазделить(ПрисоединенныеФайлы, "\", Ложь);
		ИмяФайла = ВычисляемИмяФайла.Количество();
		ИмяФайла = ВычисляемИмяФайла[Имяфайла-1];

	КонецЕсли;
	//Диалог.
	
	ТЧНоваяСтрока=Объект.ТЧЭскиз.Добавить();
	ТЧНоваяСтрока.Дата=ТекущаяДата();
	ТЧНоваяСтрока.Время=Формат(ТекущаяДата(),"ДЛФ=T");
	ТЧНоваяСтрока.Пользователь=ПользовательНаСервере ();
	ТЧНоваяСтрока.ПутьКФайлу=ПрисоединенныеФайлы;
	НаименованиеПокупателя=НаименованиеПокупателяНаСервере();
	НомерДокумента=НомерНаСервере ();
	ТЧНоваяСтрока.ПрисоединенныеФайлы = ИмяФайла;
	СоздатьКаталог("\\192.168.0.249\эскизы\"+НаименованиеПокупателя+"Заявка №"+НомерДокумента+" от "+Формат(Объект.Дата,"ДФ=dd.MM.yyyy"));
	КопироватьФайл(ПрисоединенныеФайлы,"\\192.168.0.249\эскизы\"+НаименованиеПокупателя+"Заявка №"+НомерДокумента+" от "+Формат(Объект.Дата,"ДФ=dd.MM.yyyy")+"\"+ИмяФайла);
	
	СтатусЭскизаПриИзмененииНаСервере()

КонецПроцедуры

Функция НаименованиеПокупателяНаСервере()
	Возврат Объект.Покупатель.Наименование;	
КонецФункции

Функция НомерНаСервере()
	Возврат Объект.Ссылка.Номер;	
КонецФункции


Функция ПользовательНаСервере ()
        Пользователь=Пользователи.ТекущийПользователь();
        Возврат Пользователь
КонецФункции
Показать
+
26. antz 30.11.18 11:01 Сейчас в теме
(25) зачем два раза на сервер-то бегать?

Данные = ДанныеДляПечати();

СоздатьКаталог("\\192.168.0.249\эскизы\"+Данные.Покупатель+"Заявка №"+Данные.Номер+" от "+Формат(Объект.Дата,"ДФ=dd.MM.yyyy"));
    КопироватьФайл(ПрисоединенныеФайлы,"\\192.168.0.249\эскизы\"+НаименованиеПокупателя+"Заявка №"+НомерДокумента+" от "+Формат(Объект.Дата,"ДФ=dd.MM.yyyy")+"\"+ИмяФайла);

.....

Функция ДанныеДляПечати()
    Возврат Новый Структура("Покупатель, Номер", Объект.Покупатель.Наименование, Объект.Ссылка.Номер)
КонецФункции
Показать
+
27. TopZlodey 13 30.11.18 16:50 Сейчас в теме
(26) Кстати да, можно и так, не подумал, спасибо).
+
15. user633533_encantado 11 29.11.18 11:28 Сейчас в теме
(11) На серверной тоже не должно быть проблем.
Просто процедуры, которые выбирают пути и сохраняют файл должны исполнятся на клиенте.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот