helpf.pro
Регистрация
 +6 
Распечатать

Загрузка картинок в базу 1С (сохранение в хранилище значений)

В теме форма: v8: Получение данных из ХралищаЗначений

Bell в управляемом интерфейсе пробует сохранить выбранные картинки в базу 1С, но возникли сложности с сохранением в хранилище значений. как пример Bell приложил CF файл с мини конфигурацией, за что ему большое спасибо, т.к. большая часть материалов этой статьи написана им, я лишь поправил небольшие участки кода связанные с передачей файлов и сохранение в хранилище значений.


Так как везде уже Такси, то CF я перевел в этот режим и в нем демонстрирую.

Имеется справочник Хранилище данных:

Основная Форма Элемента:

Ее код:

Код 1C v 8.3
 // ПРОЦЕДУРЫ ФОРМЫ
//======================================================================================================
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Объект.Ссылка.Пустая() Тогда
Объект.Наименование = ".";
КонецЕсли;

Если НЕ Параметры.Ключ.Пустая() Тогда
  ДанныеАдрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеХЗ");
КонецЕсли;

КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)

Если Объект.Ссылка.Пустая() Тогда
КонецЕсли;


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

Если ЭтоАдресВременногоХранилища(ДанныеАдрес) Тогда

РежимСжатия              = Новый СжатиеДанных(9);
ДанныеСохранения         = ПолучитьИзВременногоХранилища(ДанныеАдрес);
ТекущийОбъект.ДанныеХЗ   = Новый ХранилищеЗначения(ДанныеСохранения, РежимСжатия);

КонецЕсли;

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

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


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


// ПРОЦЕДУРЫ ЭЛЕМЕНТОВ ФОРМЫ
//======================================================================================================


&НаКлиенте
Процедура ВыбратьДанные(Команда)

ДанныеВыбрать();


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


&НаКлиенте
Процедура СохранитьДанные(Команда)
 
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
Предупреждение(НСтр("ru = 'Элемент не записан !!!'"));
Возврат;
КонецЕсли;

ДанныеСохранения = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеХЗ");
ИмяСохранения    = Объект.Наименование; 
//ИмяСохранения    = Объект.Наименование + Объект.ДанныеРасширение; 
    ПолучитьФайл(ДанныеСохранения, ИмяСохранения, Истина);

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


// ПРОЦЕДУРЫ ПРОЧИЕ
//======================================================================================================


&НаКлиенте
Процедура ДанныеВыбрать()

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

ДанныеАдрес = ПолученныеДанныеАдрес;

ВыбранныйФайл = Новый Файл(Объект.ДанныеПуть);
Объект.Наименование          =  ВыбранныйФайл.Имя;
Объект.ДанныеТекущаяДата     =  ТекущаяДата();

Модифицированность = Истина;
КонецЕсли;
 
КонецПроцедуры

так же имеется общая форма ФормаЗагрузкиФайлов

При помощи ее выбираются файлы изображений и загружаются в справочник - одновременно можно загружать несколько файлов

код формы:

Код 1C v 8.3
 // ПРОЦЕДУРЫ ЭЛЕМЕНТОВ ФОРМЫ
//======================================================================================================
&НаКлиенте
Процедура СписокФайловПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)

Отказ = Истина;

ДобавитьФайлы();


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

// ПРОЦЕДУРЫ ПРОЧИЕ
//======================================================================================================
&НаКлиенте
Процедура ДобавитьФайлы()

ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВыборФайла.МножественныйВыбор = Истина;
ВыборФайла.Заголовок = НСтр("ru = 'Выбор файла'", "ru");
ВыборФайла.Фильтр = НСтр("ru = 'Все файлы'", "ru") + " (*.*)|*.*";
ВыборФайла.ПредварительныйПросмотр = Истина;
Если ВыборФайла.Выбрать() Тогда

Для каждого СтрокаФайл Из ВыборФайла.ВыбранныеФайлы Цикл

ОписаниеФайла = Новый Файл(СтрокаФайл);

НВС = СписокФайлов.Добавить();
НВС.ПолноеИмяФайла   = СтрокаФайл; 
НВС.РазмерФайла      = ОписаниеФайла.Размер();

КонецЦикла;

КонецЕсли;

КонецПроцедуры
&НаКлиенте
Процедура Загрузить()

Если НЕ ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;

ОчиститьСообщения();
Если СписокФайлов.Количество() = 0 Тогда
Сообщить("Файлы не выбраны !!!'");
Возврат;
КонецЕсли;

ПомещаемыеФайлы = Новый Массив;
Для каждого СтрокаФайл Из СписокФайлов Цикл
Описание = Новый ОписаниеПередаваемогоФайла(СтрокаФайл.ПолноеИмяФайла, "");
ПомещаемыеФайлы.Добавить(Описание);
КонецЦикла;

// -------------------------------------------------------------------------------
ПомещенныеФайлы         = Новый Массив;
СписокЗагруженныхФайлов = Новый СписокЗначений;

Если ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор) Тогда

Закрыть(Истина);

Иначе

Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = НСтр("ru = 'Файлы не загружены'", "ru");
Сообщение.Сообщить();

КонецЕсли;


ОповеститьОВыборе(ПомещенныеФайлы);


КонецПроцедуры
&НаСервере
Функция ПоместитьВыбранныеФайлыВХранилище(ПомещаемыеФайлы)

АдресХЗ = ПоместитьВоВременноеХранилище(ПомещаемыеФайлы, УникальныйИдентификатор);
Возврат АдресХЗ;
КонецФункции


в коде вызывается ОповеститьОВыборе(ПомещенныеФайлы) и срабатывает обработчик в ФормаСпискаДополнительно

Код 1C v 8.3
 &НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

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

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

и следующим кодом идет создание элементов справочника и загрузка изображений из временного хранилища

Код 1C v 8.3
 &НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)

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

Элементы.Список.Обновить();

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

Скачать DT - Платформа 8.3.4

Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 55064
 +6 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 52
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче
COM-подключение к базе 7.7 из 8.2 1С 7
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь=
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э
Посмотреть все результаты поиска похожих
Комментарии
E_Migachev
24.07.2014 02:32Комментарий: 1
E_Migachev

Как верно подметил Павел Чистов, "Коллега, а модальные окна? Ну как же так )" - Добавили его статью: Работа с изображениями (картинками) в интерфейсе Такси

Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.