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

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 27 29.11.18 10:41 Сейчас в теме
Попробуйте не использовать сетевые пути - пишите конкретно "C:\Путь\имяфайла.txt"
6. TopZlodey 13 29.11.18 10:55 Сейчас в теме
(2)Там получается нужно на локальных машинах пользователей которые будут запускать серверную 1С, а там названия дисков где располагается эта папка может быть много.
8. YannikAlx 27 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 27 29.11.18 10:42 Сейчас в теме
И кроме того вам принципиально файл создавать на сервере , или может на клиенте конкретного пользователя делать?
10. user633533_encantado 12 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 12 29.11.18 11:28 Сейчас в теме
(11) На серверной тоже не должно быть проблем.
Просто процедуры, которые выбирают пути и сохраняют файл должны исполнятся на клиенте.
Оставьте свое сообщение

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