Имя: Пароль:
1C
1С v8
УТ11.4 Создание элементов справочника НоменклатураПрисоединенныеФайлы
,
0 Мимохожий Однако
 
02.11.19
19:19
Слепил функцию
Функция СоздатьПрикрФайлНаСервере(ПутьКФайлу,Том,НомеклатураСсылка)
    Спр=Справочники.НоменклатураПрисоединенныеФайлы.СоздатьЭлемент();
    Спр.ВладелецФайла=НомеклатураСсылка;
    Спр.Автор=ПараметрыСеанса.ТекущийПользователь;
    Спр.ДатаСоздания=ТекущаяДата();
    спр.ТипХраненияФайла=Перечисления.ТипыХраненияФайлов.ВТомахНаДиске;
    Спр.ПутьКФайлу=ПутьКФайлу;
    Спр.Том=Том;
    Спр.Описание=ПутьКФайлу;
    Спр.Расширение="jpg";
    Попытка
        Спр.Записать();
        Сообщить("Записан "+Спр.Ссылка+" "+" "+Том+ПутьКФайлу+" "+НомеклатураСсылка);
    Исключение
        Сообщить("При записи "+Спр.Ссылка+"//Ошибка:"+ОписаниеОшибки());
    КонецПопытки;    
    Возврат спр.Ссылка;
КонецФункции


Не удалось открыть файл:
.jpg
который присоединен к:
Присоединен к Номенклатура : ---
по причине: двоичные данные файла были удалены. Возможно, файл очищен как ненужный или удален антивирусной программой.
Обратитесь к администратору.
...
Путь к файлу - это имя файла без расширения.
Файл реально существует. Режим хранения - на диске в каталоге Том
..
Подскажите, что я мог забыть в коде или лишнее?
1 ДенисЧ
 
02.11.19
19:32
ПутьКФайлу - это _полное_  имя файла? Он точно есть, точно такой, как написано?
2 Мимохожий Однако
 
02.11.19
19:46
(1) Нет. Не полное имя. Сейчас попробую с полным именем.
3 Cyberhawk
 
02.11.19
19:55
Пользуйся программный интерфейсом этой подсистемы, иначе хапнешь горюшка
4 Мимохожий Однако
 
02.11.19
20:00
(3) Ткни носом, куда смотреть. )) С удовольствием посмотрю
5 Мимохожий Однако
 
02.11.19
20:21
Нашёл общие модули ПрисоединенныеФайлы*
У всех процедур и функций комментарий //Устарела ))
6 Мимохожий Однако
 
02.11.19
20:34
ага. Есть еще общие модули РаботаСФайлами*. Как интересно...
(3) Спасибо)
7 rozer76
 
02.11.19
21:40
(3) +1
8 Мимохожий Однако
 
03.11.19
09:15
Нашёл функцию РаботаСФайлами.СоздатьФайлНаОсновеФайлаНаДиске(ВладелецФайлов, ПутьКФайлуНаДиске);
Параметр
//   ВладелецФайлов    - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, к которому
    //                       требуется прикрепить добавляемый файл.

У меня есть НоменклатураСсылка. Как преобразовать НоменклатураСсылка во ВладелецФайлов?
9 Провинциальный 1сник
 
03.11.19
09:32
(3) Угу..напомнило анекдот про совет раввина невесте относительно одежды в первую брачную ночь..  Так вот, "кстати, тебя это тоже касается")
10 Мимохожий Однако
 
03.11.19
10:09
(8) С этим справился
    ТипСтр=Новый ОписаниеТипов(Метаданные.ОпределяемыеТипы.ВладелецПрисоединенныхФайлов.Тип);
    ВладелецФайлов=ТипСтр.ПривестиЗначение(НоменклатураСсылка);
11 Мимохожий Однако
 
03.11.19
13:47
Разрулил. Окончательный код.
Функция СоздатьПрикрФайлНаСервере(Знач Результат,Знач Выборка)
    ПутьКФайлу=СтрЗаменить(Результат.ПолноеИмяФайла,Результат.Том.ПолныйПутьWindows,"");
    
    ТипСтр=Новый ОписаниеТипов(Метаданные.ОпределяемыеТипы.ВладелецПрисоединенныхФайлов.Тип);
    ВладелецФайлов=ТипСтр.ПривестиЗначение(Выборка.Ссылка);
    
    СуществующийФайл=Новый Файл(Результат.ПолноеИмяФайла);
    
    Спр=Справочники.НоменклатураПрисоединенныеФайлы.СоздатьЭлемент();
    Спр.Наименование=Результат.ИмяФайла;
    Спр.ВладелецФайла=ВладелецФайлов;
    Спр.Автор=ПараметрыСеанса.ТекущийПользователь;
    Спр.ИндексКартинки=РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Неопределено);
    Спр.СтатусИзвлеченияТекста=Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен;
    Спр.ТипХраненияФайла=Перечисления.ТипыХраненияФайлов.ВТомахНаДиске;
    Спр.ПутьКФайлу=ПутьКФайлу;  //Здесь путь файла без Тома
    Спр.Том=Результат.Том.Том;
    Спр.Описание="Картинка "+ПутьКФайлу;
    Спр.Расширение="jpg";    
    Спр.Заполнить(Неопределено);
    Спр.ДатаМодификацииУниверсальная= СуществующийФайл.ПолучитьУниверсальноеВремяИзменения();
    Спр.Размер=СуществующийФайл.Размер();
    Спр.ДатаСоздания=СуществующийФайл.ПолучитьВремяИзменения();
    Спр.Изменил=ПараметрыСеанса.ТекущийПользователь;
    
    Попытка
        Спр.Записать();
        Сообщить("Записан "+Результат.ИмяФайла+" --> "+ВладелецФайлов);
        
        Возврат спр.Ссылка;
    Исключение
        Сообщить("При записи "+Результат.ИмяФайла+" --> "+ ВладелецФайлов+" ?"+ОписаниеОшибки());
        
        Возврат Неопределено;
    КонецПопытки;    
КонецФункции
..
Исправил ошибки:
-в реквизит Том надо было передавать СправочникСсылка.Тома
-в реквизит ВладелецФайла передал нужный тип (по факту СправочникСсылка. Номенклатура
-добавил заполнение реквизитов с параметрами файла на диске
-в реквизит ПутьКФайлу надо было передавать полный путь к файлу без пути к тому
После этого заработало.

...
В БСП были функции работы с файлами (справочник Файлы), но я не смог прикрутить к справочнику НоменклатураПрикрепленныеФайлы. Поэтому вернулся к первоначальному коду и правил его
...
для меня этот квест завершён