Доброго времени суток! У меня возник, и я был бы признателен вашим советам. Не судите строго мой вопрос.
Ситуация такова:
1) Есть два тома хранения по присоединенным файлам.
2) Нужно из тома хранения скопировать файлы в нужный том хранения
3) Мне предоставили экзельку, в которой указан список файлов и расположение файлов
Что я сделал:
1) Через внешнюю обработку прочитал файл экзельку
2) Создал запрос, с двумя параметрами : по виду ПФ и тому хранения
ВЫБРАТЬ
БИТ_СТ_ГруппыНоменклатурыВКаталогеПрисоединенныеФайлы.Ссылка КАК Ссылка,
БИТ_СТ_ГруппыНоменклатурыВКаталогеПрисоединенныеФайлы.ВладелецФайла КАК ВладелецФайла,
БИТ_СТ_ГруппыНоменклатурыВКаталогеПрисоединенныеФайлы.ПутьКФайлу КАК ПутьКФайлу,
БИТ_СТ_ГруппыНоменклатурыВКаталогеПрисоединенныеФайлы.Том КАК Том,
БИТ_СТ_ГруппыНоменклатурыВКаталогеПрисоединенныеФайлы.СТ_ХФ_ВидПрисоединенногоФайла КАК СТ_ХФ_ВидПрисоединенногоФайла,
БИТ_СТ_ГруппыНоменклатурыВКаталогеПрисоединенныеФайлы.Представление КАК Представление
ИЗ
Справочник.БИТ_СТ_ГруппыНоменклатурыВКаталогеПрисоединенныеФайлы КАК БИТ_СТ_ГруппыНоменклатурыВКаталогеПрисоединенныеФайлы
ГДЕ
БИТ_СТ_ГруппыНоменклатурыВКаталогеПрисоединенныеФайлы.СТ_ХФ_ВидПрисоединенногоФайла = &СТ_ХФ_ВидПрисоединенногоФайла
И БИТ_СТ_ГруппыНоменклатурыВКаталогеПрисоединенныеФайлы.Том = &Том
Показать
В каком направлении мне сейчас нужно идти? Мне больше всего интересует процесс получения и копирования файлов на сервере.
Буду рад вашим советам.
Спасибо!
(1) Ну, я вам хотел бы посоветовать воспользоваться стандартными обработками. Конвертации и выгрузки, загрузки данных. Там везде подробно, добротно сделано копирование данных с одного сервера на другой. Да даже посмотрите устройство синхронизации. Там подробно со всеми обработками ошибок хорошо работает алгоритм, копирования, замещения, сжатия файлов. Ну все как в задачах наших бухгалтеров.
(1) Вот статья ИТС, что может быть лучше, чем подробно описанные все глюки 1С при доступе к файловой системе в сети и на локальном компьютере.
https://its.1c.ru/db/v8std#content:542:hdoc
1. При обращении из кода конфигурации к файлам и каталогам файловой системы следует иметь в виду, что доступ к ним ограничен правами пользователя операционной системы, от имени которого запущено приложение.
1.1. Если доступ к файловой системе осуществляется из кода, выполняемого на клиенте, то он выполняется под правами пользователя, от имени которого запущено приложение (тонкий, толстый или веб-клиент). Как правило, это текущий пользователь операционной системы.
1.2. Если доступ к файловой системе осуществляется из кода, выполняемого на сервере, то:
при использовании клиент-серверной информационной базы, доступ ограничен правами пользователя, от имени которого запущен сервер 1С:Предприятия (*);
при использовании файловой базы, опубликованной на веб-сервере, доступ ограничен правами пользователя, от имени которого запущен веб-сервер.
* Рабочие процессы могут быть также запущены от имени другого пользователя, отличного от того, под которым запускается агент сервера. Подробнее см. руководство администратора клиент-серверного варианта, описание служебного файла swpuser.ini
Область применения (уточнение): управляемое приложение, обычное приложение.
2. Запрещается выполнять запись каких-либо файлов в каталог исполняемых файлов 1С:Предприятия, получаемого с помощью метода КаталогПрограммы. Использование метода КаталогПрограммы допустимо только для чтения или запуска файлов. Например, при работе в ОС Windows, для запуска копии тонкого клиента 1С:Предприятия текущей версии, допустимо использовать:
3. Даже если не планируется локализация конфигурации на другие языки, следует обеспечивать переносимость файлов, сформированных из кода конфигурации, между различными операционными системами с различными кодировками. Для этого необходимо:
3.1. В именах файлов, автоматически формируемых из кода конфигурации, указывать только английские буквы, а также цифры, а в качестве кодировки текстовых файлов использовать только UTF-8 (именно этот формат предпочтителен, т.к. только с ним корректно работает операционная система macOS).
Это ограничение распространяется на файлы сообщений обмена, выгрузки данных, электронных документов и пр., которые автоматические формируются системой, в том числе на файлы, упакованные в архивы (например, zip). Исключение составляют случаи, когда на формат файлов невозможно повлиять, например, это формат сторонней системы.
3.2. В тех случаях, когда имя файла не генерируется системой, а его явно вводит пользователь, разрешить ввод русскоязычных имен, но при этом дать возможность транслитерировать его в англоязычное имя. По умолчанию, если это технически возможно и не снижает удобство работы, рекомендуется предлагать англоязычное имя файла, а для текстовых файлов – сохранение в кодировке UTF-8.
Также эти рекомендации по выбору имени и кодировки файла следует разместить в справке к тем местам программы, где пользователь имеет возможность сохранять файлы и выбирать кодировку.
В конфигурациях на базе Библиотеки стандартных подсистем для транслитерации имен файлов рекомендуется использовать функцию СтроковыеФункцииКлиентСервер.СтрокаЛатиницей.
1. Через КопироватьФайл(Откуда,Куда) физически перенести сами файлы. Либо же сделать это другими средствами, не через 1с. Что в принципе будет, наверное, проще.
2. В справочнике заменить пути файлов на правильные.
(2) Что касается второго пункта, то пути файлов верные. Просто ЦОД неправильно загрузил файлы. Вот теперь эти файлы нужно перенести.
А по поводу 1го пункта, то могли бы Вы пояснить?
Давайте разберемся. У вас в справочнике пути файлов верные, но по факту они лежат не там где надо. В таблице у вас фактические пути. Вам надо перенести файлы от туда, где они сейчас, туда где они должны быть (по путям справочника). Всё верно? Если всё происходит на оном физ. сервере (и 1с запущена и файлы лежат) то циклом идете по списку файлов и выполняете:
КопироватьФайл(ПутьИзТаблицы,ПутьИзФайла)
Если я что-то не правильно пониманию, рассказывайте, уточняйте - будем разбираться!
(4) Да, все верно, просто как видите во вложенном файле таблицы, ссылки на расположения тома странные, например :
\\lux.ltcompany.com\ALL\1CExtenalFiles\Request_to_spend_money_form__BIT_/20170412/000000396_albatros ntk 20.png.png",
Двойное расширение имени файла.
Это никак не повлияет?
(5) Не сразу заметил это сообщение, но в принципе внизу написал о том же. У Вас есть физическая возможность зайти в каталог с файлами и посмотреть какое реальное имя файла? т.е. оно действительно 000000396_albatros ntk 20.png.png или же 000000396_albatros ntk 20.png ?
&НаСервере
Процедура ВыполнитьКопированиеФайловНаСервере()
Для Каждого Стр Из СписокФайлов Цикл
КопироватьФайл(Стр.РасположениеФайла, Стр.НовыйПутьХранения);
КонецЦикла;
КонецПроцедуры
(7)Судя по скриншоту, у вас какие-то ошибки в путях/именах. В исходном пути расширение два раза указано, а в конечном вообще не указано имя файла и расширение.
(16) Ну соответственно проверять, что у пользователя, под которым запускается 1с (в случае сервера - под которым запускается агент сервера) есть права на работу с файлами в этих директориях.
(19) Пользователь видит решение данной темы иначе :
1) Если у файла нет владельца, то тогда скидывать файл в архивную папку
2) Если у файла есть владелец, то тогда скопировать его в ту папку нужную, и поменять том хранения
(22) А в чем конкретно проблема то? Идем по списку файлов, проверяем на владельца, если есть - копируем в путь из таблицы, если нет, копируем в путь архива. А лучше более простой вариант - два запроса. Первым получаем всех без владельца и копируем в архив, вторым с владельцем и копируем по нужному пути.
Немного дополню предыдущий ответ. Первый метод - это чисто работа со строкой, он более универсальный, но в теории менее точный. Второй более правильный, но он не сработает если файл НЕ существует по данному пути.
(30) Архитекторы сказали, что я верно ищу владельца. Оказывается нужно искать по пути файла. А точнее если берем
\\lux.ltcompany.com\ALL\1CExtenalFiles\Request_to_spend_money_form__BIT_\20181226\GLOSS LED8.png, то искать по 20181226\GLOSS LED8.png.
Для копирования, перемещения, удаления и прочих действий с файлами, существуют процедуры и функции работы с файлами глобального контекста. В частности, копирование файла может быть выполнено функцией КопироватьФайл():
Копировать в буфер обмена
КопироватьФайл("C:/Test.txt","C:/CopyOfTest.txt");
Эта функция копирует файл-источник в файл-приемник. Допускается перезапись файла-приемника. Файл-приемник при создании будет иметь права доступа, аналогичные назначаемым при создании новых файлов (т.е. права доступа к файлу-источнику не копируются). Допускается использование схем http, https и ftp для адресации файлов. При использовании этих схем в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
Встроенный язык содержит также и другие средства для работы с файлами: объекты Файл и ДиалогВыбораФайла. Объект Файл позволяет читать и устанавливать некоторые параметры существующих файлов, а объект ДиалогВыбораФайла предоставляет средства доступа к специальному диалогу, в котором пользователь выполняет интерактивный выбор каталога, файлов для открытия, или файла для сохранения.