Уважаемые форумчане помогите решить проблему.
Не пойму как загрузить картинку в карточку номенклатуры. Конфигурация УТ11.
На просторах сети ничего подобного найти не удалось(.
(1) pkv11, Заходишь в карточку номенклатуры, справа есть окошко(внутри написано:добавить изображение), кликаешь на него и добавляешь картинку, а над окошком есть кнопки управления изображением
(1) В книге "Разработка управляемого интерфейса" есть глава посвященная работе с картинками. В том числе и загрузка. По-моему, была и публикация здесь на эту тему.
(1) Плохо искал
Загрузка изображения из буфера обмена или файла для номенклатуры (Управление торговлей 11, УНФ 1.2/1.3/1.4, Розница 2)
http://infostart.ru/public/81133/
КартинкаСсылка = Справочники.НоменклатураПрисоединенныеФайлы.ПустаяСсылка();
Если Не ТоварКартинка = Неопределено или не ТоварКартинка = "" Тогда
Если КартинкаСсылка.Пустая() Тогда
КартинкаСсылка = Справочники.НоменклатураПрисоединенныеФайлы.НайтиПоНаименованию(НоменклатураОбъект.Код);
КонецЕсли;
Если КартинкаСсылка.Пустая() Тогда
КартинкаОбъект = Справочники.НоменклатураПрисоединенныеФайлы.СоздатьЭлемент();
КартинкаОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
КартинкаОбъект.Наименование = НоменклатураОбъект.Код;
КартинкаОбъект.ВладелецФайла = НоменклатураОбъект.Ссылка;
Соединение=Новый HTTPСоединение("адрес_сайта");
ИмяВременногоФайла=ПолучитьИмяВременногоФайла(".jpg");
Соединение.Получить("/" + ТоварКартинка,ИмяВременногоФайла);
КартинкаОбъект.ФайлХранилище = Новый Картинка(ИмяВременногоФайла, истина);
КартинкаОбъект.Расширение = "jpg";
КартинкаСохранить = РегистрыСведений.ПрисоединенныеФайлы.СоздатьНаборЗаписей();
КартинкаСохранить.Отбор.ПрисоединенныйФайл.Установить();
НовыйФайл = КартинкаСохранить.Добавить();
НовыйФайл.ПрисоединенныйФайл = КартинкаОбъект.Наименование;
НовыйФайл.ХранимыйФайл = КартинкаОбъект.ФайлХранилище;
КартинкаСохранить.Записать();
КартинкаОбъект.Записать();
КартинкаСсылка = КартинкаОбъект.Ссылка;
КонецЕсли;
НоменклатураОбъект.ФайлКартинки = КартинкаСсылка;
Иначе
НоменклатураОбъект.ФайлКартинки = Справочники.НоменклатураПрисоединенныеФайлы.ПустаяСсылка();
КонецЕсли;
Показать
В картинку что-то добавляется, но не картинка.
Нашел в регистре сведений "ПрисоединенныеФайлы", пробую добавить туда данные, но выдает ошибку:
{Форма.Форма.Форма(246)}: Ошибка при вызове метода контекста (Записать)
КартинкаСохранить.Записать();
по причине:
Запись не верна! Значение поля "Присоединенный файл" не может быть пустым!: ПрисоединенныеФайлы: (Регистр сведений: Присоединенные файлы)
А у меня выходит такая ошибка:
"{Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(498)}: Поле объекта недоступно для записи (ФайлКартинки)
НоменклатураОбъект.ФайлКартинки = КартинкаСсылка;"
(22) s_uu, Т.к. Вы подробностей не указали, то могу предположить, что скорее всего вы пробуете запускать код в новом релизе, обработка писалась год назад еще под 11.0..
(22) s_uu, ну так странно как то сидеть в объекте справочника, а обращаться как буд-то где-то далеко от него.. Просто в самом справочнике обращение было было бы чуть иначе..
Было то, что я использовала код в модуле основной формы объекта справочника Номенклатура. Код заработал после того, как я его вынесла во внешнюю обработку!
тоже находил похожую разработку в другой теме. сделано было чуть попроще. работало все тоже прекрасно. разработка только была под 10,3. там было типа того, как писал aristar...
(29) maksimkonkov, к сведению - 10.3 и 11 конфигурации разные.. 98% обработок, написанных под одну конфу, не будет работать на другой. Поэтому назвать "похожая" обработка в корне неправильно. Если у вас есть более удачный способ решения данного вопроса, то прошу им поделиться со всеми.
(32) s_uu, (31) Bukaska, давайте не будем удаляться от темы. Спасибо.
Спасибо огромное! Гружу картинки из xml в виде двоичных данных. Искал как эти картинки должны храниться и записываться в справочник НоменклатураПрисоединенныеФайлы..а тут готовое решение.
код работает, но если сделать ТипХраненияФайл ов не ВИнформационной Базе, а ВТомахНаДиске то не получается.
создаются только записи в справочник и в регистр, а сами картинки никуда не грузятся.
(38) bce-kpyto, так таким образом по идее и не должна картинка никуда грузиться, теоретически создается ссылка на картинку и если по этой ссылке картинка есть, то картинка и покажется. Данным способом не пользовался.
Может кому пригодится, актуальный вариант для КА 2.0, пакетное присоединение файлов к номенклатуре
&НаКлиенте
Процедура ЗагрузитьИзображения()
МассивКартинок=НайтиФайлы(ПутьКкартинкам,"*.JPG");
ПомещаемыеФайлы=новый Массив;
для каждого ф из МассивКартинок цикл
ПомещаемыеФайлы.Добавить(новый ОписаниеПередаваемогоФайла(ф.полноеимя));
КонецЦикла;
ПомещенныеФайлы=новый Массив;
ПоместитьФайлы(ПомещаемыеФайлы,ПомещенныеФайлы,,Ложь);
для сч=0 по ПомещенныеФайлы.Количество()-1 цикл
массивДанных.Добавить(новый Структура("ИмяБезРасширения,Расширение,АдресФайлаВоВременномХранилище",
сокрлп(МассивКартинок[сч].ИмяБезРасширения),
сокрлп(МассивКартинок[сч].Расширение),
ПомещенныеФайлы[сч].Хранение
));
КонецЦикла;
ЗагрузитьИзображенияСервер(массивДанных);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьИзображенияСервер(МД)
пустАвтор=Справочники.Пользователи.ПустаяСсылка();
для каждого элем из МД цикл
спр=Справочники.Номенклатура.НайтиПоКоду(элем.ИмяБезРасширения);//или какой-либо иной способ сопоставления
если спр.Пустая() тогда продолжить КонецЕсли;
ПараметрыФайла=новый Структура("ВладелецФайлов,ИмяБезРасширения,РасширениеБезТочки,Автор,ВремяИзмененияУниверсальное",спр,элем.ИмяБезРасширения,элем.Расширение,пустАвтор,"");
ПрисоединеннаяКартинка=ПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл(ПараметрыФайла,элем.АдресФайлаВоВременномХранилище);
КонецЦикла;
КонецПроцедуры
Брошу свои 5 копеек в тему, может кому пригодиться для УТ 11.
&НаКлиенте
Процедура ЗагрузитьКартинки(Команда)
Если Не ЗначениеЗаполнено(ПутьКПапкеКартинок) Тогда
Возврат;
КонецЕсли;
ФайлыВПапке = НайтиФайлы(ПутьКПапкеКартинок + "\","*.jpg",Истина);
Для каждого мФайл Из ФайлыВПапке Цикл
АдресВХ = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(мФайл.ПолноеИмя),Новый УникальныйИдентификатор);
ПоместитьКартинкуНаСервере(мФайл.ИмяБезРасширения,мФайл.Расширение,мФайл.ПолучитьУниверсальноеВремяИзменения(),АдресВХ);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПоместитьКартинкуНаСервере(ИмяБезРасширения,Расширение,ПолучитьУниверсальноеВремяИзменения,АдресВХ)
Владелец = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",ИмяБезРасширения);
Если ЗначениеЗаполнено(Владелец) И НЕ ЗначениеЗаполнено(Владелец.ФайлКартинки) Тогда
// Создание карточки Файла в базе данных.
ПараметрыФайла = РаботаСФайламиСлужебныйКлиентСервер.ПараметрыДобавленияФайла();
ПараметрыФайла.ГруппаФайлов = Неопределено;
ПараметрыФайла.ВладелецФайлов = Владелец;
ПараметрыФайла.ИмяБезРасширения = ИмяБезРасширения;
ПараметрыФайла.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(Расширение);
ПараметрыФайла.ВремяИзмененияУниверсальное = ПолучитьУниверсальноеВремяИзменения;
ПрисоединенныйФайл = РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл(
ПараметрыФайла,
АдресВХ,
"");
Если ЗначениеЗаполнено(ПрисоединенныйФайл) Тогда
ВладелецОбъект = Владелец.ПолучитьОбъект();
ВладелецОбъект.ФайлКартинки = ПрисоединенныйФайл;
ВладелецОбъект.Записать();
КонецЕсли;
Иначе
УдалитьИзВременногоХранилища(АдресВХ);
КонецЕсли;
КонецПроцедуры