Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 апр 2024, 10:11

Не сохраняется картинка у номенклатуры из присоединенных файлов УТ

Автор uchenik96, 28 июн 2018, 15:02

0 Пользователей и 1 гость просматривают эту тему.

uchenik96

Здравствуйте..есть проблема ..
На форме у справочника "Номенклатура", есть кнопка которая вызывает форму справочника "НоменклатураДляСайта". Если такая номенклатура есть в регистре сведений -СоответствиеНоменклатурыСайта,поля автоматически будут заполнены ею, иначе будет создаваться новая номенклатура..которая также должна проводиться в регистр сведений данный.
Суть : при выборе картинки для НоменклатурыДляСайта, она загружается, но не сохраняется, при повторном открытии этой номенклатуры там пусто.(УТ 11, делаю по аналогии с присоединенными файлами)

ОЧЕНЬ СРОЧНО НУЖНО:trhregerhg:



&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтаФорма);
ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);

Если не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Если Не Объект.ФайлКартинки.Пустая() Тогда
АдресКартинки = НавигационнаяСсылкаКартинки(Объект.ФайлКартинки, УникальныйИдентификатор)
Иначе
АдресКартинки = "";
Конецесли;
Иначе
ЕстьПравоРедактирования = Истина;

КонецЕсли;

КонецПроцедуры


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)


Если Не Объект.ФайлКартинки.Пустая() Тогда
АдресКартинки = НавигационнаяСсылкаКартинки(Объект.ФайлКартинки, УникальныйИдентификатор)
Иначе
АдресКартинки = "";
Конецесли;

КонецПроцедуры


&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

// Обработчик механизма "Свойства"
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);

// РеквизитыОбъекта = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Объект.ВидНоменклатуры, СтруктураРеквизитов);
// КонтролироватьУникальностьРабочегоНаименования = Константы.КонтролироватьУникальностьРабочегоНаименованияНоменклатурыИХарактеристик.Получить();

КонецПРоцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

//НастроитьПанельНавигации();

ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтаФорма);

КонецПроцедуры


&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

// Обработчик механизма "Свойства"
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
КонецЕсли;


Если ИмяСобытия = "Запись_ПрисоединенныйФайл" Тогда

Модифицированность = Истина;
СсылкаНаФайл = ?(ТипЗнч(Источник) = Тип("Массив"), Источник[0], Источник);

Если ВыборИзображения Тогда

Объект.ФайлКартинки = СсылкаНаФайл;
АдресКартинки = НавигационнаяСсылкаКартинки(Объект.ФайлКартинки, УникальныйИдентификатор);

КонецЕсли;
//НастроитьПанельНавигации();

КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ФайлКартинкиПриИзменении(Элемент)
Если Не Объект.ФайлКартинки.Пустая() Тогда
АдресКартинки = НавигационнаяСсылкаКартинки(Объект.ФайлКартинки, УникальныйИдентификатор)
Иначе
АдресКартинки = "";
Конецесли;

КонецПроцедуры
&НаКлиенте
Процедура ОписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияМногострочногоТекста(Элемент.ТекстРедактирования, Объект.Описание, Модифицированность, НСтр("ru = 'Дополнительная информация'"));

КонецПроцедуры


&НаСервереБезКонтекста
Функция ПолучитьНавигационнуюСсылкуКартинки(ФайлКартинки, ИдентификаторФормы)
   
    Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(ФайлКартинки, ИдентификаторФормы).СсылкаНаДвоичныеДанныеФайла;
   
КонецФункции


&НаКлиенте
Процедура АдресКартинкиНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗаблокироватьДанныеФормыДляРедактирования();
ДобавитьИзображениеНаКлиенте();
КонецПроцедуры



&НаКлиенте
Процедура ВыбратьКартинкуИзПрисоединенныхФайлов(Команда)
ПараметрыВыбора = Новый Структура("ВладелецФайла, ЗакрыватьПриВыборе", Объект.Ссылка, Истина);
ЗначениеВыбора = ОткрытьФормуМодально("ОбщаяФорма.ВыборПрисоединенныхФайлов", ПараметрыВыбора);

Если ЗначениеЗаполнено(ЗначениеВыбора) Тогда

Объект.ФайлКартинки = ЗначениеВыбора;
АдресКартинки = НавигационнаяСсылкаКартинки(Объект.ФайлКартинки, УникальныйИдентификатор)

КонецЕсли;

КонецПроцедуры


&НаСервереБезКонтекста
Функция НавигационнаяСсылкаКартинки(ФайлКартинки, ИдентификаторФормы)

УстановитьПривилегированныйРежим(Истина);
Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(ФайлКартинки, ИдентификаторФормы).СсылкаНаДвоичныеДанныеФайла;

КонецФункции

Процедура НастроитьЭлементыДополнительныхРеквизитов()

Для Каждого Элемент Из Элементы.ГруппаДополнительныеРеквизиты.ПодчиненныеЭлементы Цикл

Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда

Если Элемент.МногострочныйРежим <> Истина Тогда

Элемент.РастягиватьПоГоризонтали = Ложь;

Иначе

Элемент.ПоложениеЗаголовка       = ПоложениеЗаголовкаЭлементаФормы.Лево;
Элемент.РастягиватьПоВертикали   = Ложь;
Элемент.РастягиватьПоГоризонтали = Истина;

КонецЕсли;

ИначеЕсли Элемент.Вид = ВидПоляФормы.ПолеФлажка Тогда

Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()

УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект"));
НастроитьЭлементыДополнительныхРеквизитов();

КонецПроцедуры

&НаКлиенте
Процедура ДобавитьИзображениеНаКлиенте()
ЕстьПравоРедактирования = Истина;
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда

ТекстВопроса = НСтр("ru='Для выбора изображения необходимо записать объект. Записать?'");
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);

Если Ответ = КодВозвратаДиалога.Да Тогда
Записать();
Иначе
Возврат
КонецЕсли;

КонецЕсли;

Если ЗначениеЗаполнено(Объект.ФайлКартинки) Тогда

ПросмотретьПрисоединенныйФайл();

ИначеЕсли ЗначениеЗаполнено(Объект.Ссылка) Тогда

Если Не ЕстьПравоРедактирования Тогда

ТекстИсключения = НСтр("ru = 'Нарушение прав доступа!'");
ВызватьИсключение ТекстИсключения;

КонецЕсли;


ВыборИзображения = Истина;
ИдентификаторФайла = Новый УникальныйИдентификатор;

Фильтр = НСтр("ru = 'Все картинки (*.bmp;*.gif;*.png;*.jpeg;*.dib;*.rle;*.tif;*.jpg;*.ico;*.wmf;*.emf)|*.bmp;*.gif;*.png;*.jpeg;*.dib;*.rle;*.tif;*.jpg;*.ico;*.wmf;*.emf"
                            + "|Все файлы(*.*)|*.*"
                            + "|Формат bmp(*.bmp*;*.dib;*.rle)|*.bmp;*.dib;*.rle"
                            + "|Формат GIF(*.gif*)|*.gif"
                            + "|Формат JPEG(*.jpeg;*.jpg)|*.jpeg;*.jpg"
                            + "|Формат PNG(*.png*)|*.png"
                            + "|Формат TIFF(*.tif)|*.tif"
                            + "|Формат icon(*.ico)|*.ico"
                            + "|Формат метафайл(*.wmf;*.emf)|*.wmf;*.emf'");

ПрисоединенныеФайлыКлиент.ДобавитьФайлы(Объект.Ссылка, ИдентификаторФайла, Фильтр);
ВыборИзображения = Ложь;

КонецЕсли;


КонецПроцедуры

&НаКлиенте
Процедура ПросмотретьПрисоединенныйФайл()

ОчиститьСообщения();

Если ЗначениеЗаполнено(Объект.ФайлКартинки) Тогда

ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.ФайлКартинки, УникальныйИдентификатор);
ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла);

Иначе

ТекстСообщения = НСтр("ru='Отсутстует изображение для просмотра'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "АдресКартинки");

КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ФайлКартинкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПрисоединенныеФайлыКлиент.ОткрытьФормуВыбораФайлов(Объект.Ссылка, Элементы.ФайлКартинки);
КонецПроцедуры







Sy4a

Не понял где вы храните эту картинку? и как загружаете её?
Вот пример процедуры загрузки файла с компьютера и помещение её в присоединенные файлы.

&НаКлиенте
Процедура ВыполнитьКоманду(Команда)
МояФорма=ЭтаФорма;
Массив=Новый Массив();
Массив=Таблица();
Кол=Массив.количество();
Для каждого строка из Массив цикл
// Для Каждого строка из стр цикл
Файл = Новый Файл(строка.ссылка);
    ФайлИсточник = Файл.ПолноеИмя;
    Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ФайлИсточник));

СоздатьПФ(Строка,Адрес);
КонецЦикла;
ОбъектыНазначенияМассив=Новый Массив();
ОбъектыНазначенияМассив.Добавить(объект.Реквизит1);
МояФорма.Закрыть();
Сообщить("Скан-копии были добавлены в ""Присоединенные файлы""");
КонецПроцедуры

&НаСервере
Функция Таблица()
Массив=Новый Массив();
// ТЗ=Новый Структура("ТипДокумента, Номер, Дата, ссылка, каталог, Имя, Расширение");
Табл=Объект.ТабличнаяЧасть1.Выгрузить();
Количество=табл.Количество();
Для каждого строка из Табл цикл
ТЗ=Новый Структура("ТипДокумента, Номер, Дата, ссылка, каталог, Имя, Расширение");
ТЗ.ТипДокумента=Строка.ТипДокумента;
ТЗ.Номер=Строка.Номер;
ТЗ.Дата=Строка.Дата;
ТЗ.ссылка=строка.ссылка;
ТЗ.каталог=строка.каталог;
ТЗ.Имя=строка.имя;
ТЗ.Расширение=строка.Расширение;
Массив.Добавить(ТЗ);
// ТЗ.Очистить();
КонецЦикла;
Возврат массив;
КонецФункции 

&НаСервере
Процедура СоздатьПФ(Строка,Адрес)
Документ=Объект.Реквизит1.Ссылка.ПолучитьОбъект();
ВладелецФайла=Документ.Ссылка;
НомерЗаявки=Документ.Номер;
НомерДокумента=строка.Номер;
НомерДокумента=СтрЗаменить(НомерДокумента,":","@");
НомерДокумента=СтрЗаменить(НомерДокумента,"*","@");
НомерДокумента=СтрЗаменить(НомерДокумента,"?","@");
НомерДокумента=СтрЗаменить(НомерДокумента,"\","@");
НомерДокумента=СтрЗаменить(НомерДокумента,"/","@");
НомерДокумента=СтрЗаменить(НомерДокумента,"<","@");
НомерДокумента=СтрЗаменить(НомерДокумента,">","@");
НомерДокумента=СтрЗаменить(НомерДокумента,"|","@");
Если ЗначениеЗаполнено(НомерДокумента) Тогда
НомерДокумента="_"+НомерДокумента;
КонецЕсли;
Если ЗначениеЗаполнено(Строка.дата) Тогда
Дата="_"+Формат(Дата(Строка.дата),"ДФ=dd.MM.yyyy");
КонецЕсли;
Наименование=НомерЗаявки+"_"+строка.Типдокумента+НомерДокумента+Дата;
ссылка=ПрисоединенныеФайлы.ДобавитьФайл(ВладелецФайла,Строка.имя,Строка.Расширение,,,адрес,,,);
ПФ=ссылка.ПолучитьОбъект();
ПФ.наименование=Наименование;
ПФ.Записать();
ПФ.Прочитать();
// с.ВладелецФайла=Номер;
// с.Записать();
КонецПроцедуры

Где ТабличнаяЧасть1 у меня ТаблицаЗначений в котором колонка "Ссылка" имеет тип строка и в ней хранится полный путь к файлу на данном компьютере, Реквизит1 имеет тип ДокументСсылка с сылкой на документ в присоединенные файлы которого я ложу файлик. Свою форму для присоединенных файлов не создавал так как уж больно много процедур на этом завязано и смысла нет, проще хранить в уже готовом справочнике а из него доставать по подобию как в номенклатуре сделано если нужно для просмотра.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск