|
сжатие картинок в 1т 11 - не могу перезаписать значение картинки | ☑ | ||
---|---|---|---|---|
0
Екактерина
23.09.19
✎
11:20
|
Добрый день!
Пожалуйста, подскажите,что делаю не так Сжала картинки справочника номенклатуры сторонними средствами, записала их в папку, теперь мне нужно перезаписать основное изображение номенклатуры на это сжатое изображение. Но хранилище значений для записи недоступно, что могу делать не так? в 1с совсем мало...помогите! Вот код: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка, | Номенклатура.ФайлКартинки КАК ФайлКартинки, | Номенклатура.ЭтоГруппа КАК ЭтоГруппа, | Номенклатура.Код КАК Код |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка = &Ссылка"; //Запрос.УстановитьПараметр("Родитель", Объект.Группа); Запрос.УстановитьПараметр("Ссылка", Объект.Номенклатура); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ЭтоГруппа Тогда ПРодолжить;КонецЕсли; Если ЗначениеЗаполнено(Выборка.ФайлКартинки) Тогда ПервоначальнаяКартинка = РаботаСФайлами.ДвоичныеДанныеФайла(Выборка.ФайлКартинки); //Картинка = Выборка.ФайлКартинки.ФайлХранилище.Получить(); Если ПервоначальнаяКартинка = Неопределено Тогда Продолжить;КонецЕсли; Если ПервоначальнаяКартинка.Размер()/1024 > 100 Тогда ИмяФайла = "C:\Users\Desktop\!!!\IN\"+СокрЛП(Выборка.Код)+".jpg"; ИмяФайлa3 = "C:\Users\Desktop\!!!\IN\"+СокрЛП(Выборка.Код + "-W600")+".jpg"; ИмяФайла2 = "C:\Users\Desktop\!!!\OUT\"+СокрЛП(Выборка.Код)+".jpg"; ПервоначальнаяКартинка.Записать(ИмяФайла); Результат = Неопределено; ЗапуститьПриложение("C:\Users\Desktop\!!!\Im\PhotoResize400.exe -o -w600 " + ИмяФайла,,Истина,Результат); ЗапуститьПриложение("C:\Users\Desktop\!!!\jpgcln26\JPGCLN32.EXE -nobackup "+ИмяФайла2,,Истина,Результат); Если Результат <> Неопределено Тогда ИзмененнаяПозиция = Выборка.Ссылка.ПолучитьОбъект(); МояКартинка = Новый Картинка(ИмяФайлa3); МояКартинка.Записать(ИмяФайла2); Хран = Новый ХранилищеЗначения(МояКартинка); ИзмененнаяПозиция.ФайлКартинки.ФайлХранилище = Хран; // место, где ругается ИзмененнаяПозиция.Записать(); Сообщить("Номенклатура "+Выборка.Ссылка); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; |
|||
1
Ёпрст
23.09.19
✎
11:24
|
(0) ИзмененнаяПозиция.ФайлКартинки.ФайлХранилище = Хран //от тут поправь
|
|||
2
catena
23.09.19
✎
11:25
|
Получив объект номенклатуры вы не получаете объекты всех связанных реквизитов. Что такое ИзмененнаяПозиция.ФайлКартинки ?
|
|||
3
Екактерина
23.09.19
✎
11:25
|
я понимаю, что там надо поправить, я и спрашиваю почему не записывает
|
|||
4
Ёпрст
23.09.19
✎
11:25
|
ФайлХранилище - это слово выкинь везде из кода и привет
|
|||
5
Екактерина
23.09.19
✎
11:26
|
Измененная позиция это объект номенклатуры, файлкартинки это поле, где хранится наименование файла основного изображения. и я внутри обращаюсь к хранилищу
|
|||
6
Екактерина
23.09.19
✎
11:27
|
в файлехранилище же и есть моя картинка и его мне нужно перезаписать
|
|||
7
Екактерина
23.09.19
✎
11:28
|
НайденнаяССылка=Справочники.ХранилищеДополнительнойИнформации.НайтиПоРеквизиту("Объект",Выборка.Ссылка);
Объект = НайденнаяССылка.ПолучитьОбъект(); МояКартинка = Новый Картинка(ИмяФайла2); Хран = Новый ХранилищеЗначения(МояКартинка); Объект.Хранилище = Хран; Объект.Записать(); я опиралась на вот этот код с инфостарта для ут 10 |
|||
8
ptiz
23.09.19
✎
11:31
|
(0) ИзмененнаяПозиция.ФайлКартинки - это ССЫЛКА на справочник. Нельзя менять значение реквизита у ссылки. Либо новый элемент создавай, либо через "получитьобъект()" меняй у объекта.
|
|||
9
Ёпрст
23.09.19
✎
11:34
|
(7) тогда так:
|
|||
10
Екактерина
23.09.19
✎
11:36
|
Я получала объект и из присоединенной номенклатуры и в ней пыталась перезаписть и ошибка та же
Если Результат <> Неопределено Тогда НайденнаяССылка=Справочники.НоменклатураПрисоединенныеФайлы.НайтиПоНаименованию(Выборка.ФайлКартинки); //ИзмененнаяПозиция = Выборка.Ссылка.ПолучитьОбъект(); МояКартинка = Новый Картинка(ИмяФайлa3); МояКартинка.Записать(ИмяФайла2); Хран = Новый ХранилищеЗначения(МояКартинка); //ИзмененнаяПозиция.ФайлКартинки = СокрЛП(Выборка.Код); //ИзмененнаяПозиция.ФайлКартинки.ФайлХранилище = Хран; //ИзмененнаяПозиция.Записать(); НайденнаяСсылка.ФайлХранилище = Хран; НайденнаяСсылка.Записать(); Сообщить("Номенклатура "+Выборка.Ссылка); КонецЕсли; |
|||
11
Екактерина
23.09.19
✎
11:41
|
нашла ошибку объект не взяла, но все равно он не перезаписывает на измененное сжатое изображение
|
|||
12
ptiz
23.09.19
✎
11:51
|
(11) См. (9)
Только там: а) или МояКартинка.Записать(ИмяФайла2); - лишнее б) или не хватает ДвДанные = Новый ДвоичныеДанные(ИмяФайла2); Хран = Новый ХранилищеЗначения(ДвДанные ); (я не смотрел как правильно в УТ11 картинку пихать) ну и имена файлов проверить |
|||
13
Екактерина
23.09.19
✎
12:02
|
а может ли быть дело в том. что я меняю хранилище значение основной картинки, которая содержит другой путь и поэтому он не перезаписывает... Я просто не могу понять, что я делаю неправильно. Сильно меня не ругайте, пожалуйста. я в тупике с этим сжатием и знаний маловато..
|
|||
14
Teamen
02.10.19
✎
11:07
|
Я тоже новичок в написании кода, но недавно как раз решал такую задачу, вот удалось в процедуре обновить файл после сжатия
НоваяКартинка = Новый Картинка (ЛокПуть); Попытка ХранилищеКартинки = Новый ХранилищеЗначения(НоваяКартинка); Исключение Возврат Null; КонецПопытки; ЛокСправочникХЗНСсылка = Справочники.ХранилищеДополнительнойИнформации.НайтиПоРеквизиту("Объект",Выборка.Объект); Если ЛокСправочникХЗНСсылка.Пустая() Тогда Возврат Null; КонецЕсли; ЛокСправочникХЗН = ЛокСправочникХЗНСсылка.ПолучитьОбъект(); РазмерНовый = НоваяКартинка.ПолучитьДвоичныеДанные().Размер(); Если Анализ <> Истина Тогда ЛокСправочникХЗН.Хранилище = ХранилищеКартинки; ЛокСправочникХЗН.Записать(); КонецЕсли; Попытка Сообщить ("Объект " + Выборка.Объект + " имеет НОВЫЙ размер картинки => " + РазмерНовый); Возврат РазмерНовый; Исключение Возврат Null; КонецПопытки; |
|||
15
palsergeich
02.10.19
✎
11:19
|
(14) не надо в коде использовать Null, этот литерал есть только для совместимости с запросами.
Стандарт для кода 1с это НЕОПРЕДЕЛЕННО. Именно его возвращает функция без ключевого слова Возврат, а не Null |
|||
16
Teamen
02.10.19
✎
11:28
|
Спасибо за разъяснение.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |