мне кажется, что вы в Хранилище значения записываете адрес, а не реальные двоичные данные. Через время в том адресе ничего не будет в свое время пришлось вычищать людям базу, когда таких картинок стало под 10Гб в ней. Лучше сделайте хранение на жестком диске, иначе у вас база будет распухать высокими темпами
покажу свой вариант -- в свое время понадобилось хранить в БД факсимиле менеджеров с печатями (для выставления счетов от имени разных фирм, где работают менеджеры по совместительству)
делал так:
// справочник "ПодписиМенеджеров" // на форме элемента создаем реквизит типа Строка (неограниченной длины) с именем "СсылкаНаКартинку" для отображения и работы с картинкой // реквизит справочника "Подпись" имеет тип ХранилищеЗначения
// потом (это фрма элемента справочника ПодписиМенеджеров)
&НаКлиенте Процедура СсылкаНаКартинкуНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытия.ПолноеИмяФайла = ""; Фильтр = "Файл PNG (*.png)|*.png"; ДиалогОткрытия.Фильтр = Фильтр; ДиалогОткрытия.МножественныйВыбор = Ложь; ДиалогОткрытия.Заголовок = "Выберете файл для загрузки"; ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗагрузкиФайла",ЭтаФорма); ДиалогОткрытия.Показать(ОписаниеОповещения); КонецПроцедуры
&НаКлиенте Процедура ПослеЗагрузкиФайла(ВыбранныйФайл,ДопПараметр) Экспорт Если ВыбранныйФайл = Неопределено Тогда Возврат; КонецЕсли; ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтаФорма); НачатьПомещениеФайла(ОписаниеОповещения,, ВыбранныйФайл[0], Ложь, УникальныйИдентификатор); КонецПроцедуры
&НаКлиенте Процедура ПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла,ДопПараметры) Экспорт Если Не Результат Тогда Возврат; КонецЕсли; СсылкаНаКартинку = Адрес; Модифицированность = Истина; КонецПроцедуры
&НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда ФайлКартинки = ПолучитьИзВременногоХранилища(СсылкаНаКартинку); ТекущийОбъект.Подпись = Новый ХранилищеЗначения(ФайлКартинки); УдалитьИзВременногоХранилища(СсылкаНаКартинку); СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"Подпись"); КонецЕсли; КонецПроцедуры
// а это документ "ЗаказПокупателя" // и потом в заказе покупателя процедура печати
// тут просто ищем в справочнике нужного пользователя по нужной фирме и если нашли его факсимиле -- выдаем его _факсимиле = Документы.ЗаказПокупателя._ПолучитьСсылкуНаПодписьМенеджера(Объект.Ответственный, Объект.Организация); // и показываем картинку на макете Если _факсимиле = Неопределено Тогда Сообщить("Не определено факсимиле для текущего пользователя", СтатусСообщения.Информация); Иначе // получаем и отображаем факсимиле ОбластьЗаголовок.Рисунки.ФаксимильнаяПечать.Картинка = Новый Картинка(_факсимиле.Подпись.Получить()); КонецЕсли;
{Справочник.ХранилищеДополнительнойИнформации.Форма.ФормаСпискаФайловИИзображений.Форма(99)}: Ошибка при установке значения атрибута контекста (Картинка) ЭлементыФормы.ПолеИзображения.Картинка = ?(ТекущаяКартинка <> Неопределено, ТекущаяКартинка, Новый Картинка()); по причине: Несоответствие типов
kostya77 @ Сегодня, 13:14
, Вроде первым параметром должен иметь тип Картинка. То есть, полученный файл надо сохранить на диск, потом получить Изображение = Новый Картинка(полученный файл) и потом это изображение поместить в ХранилищеЗначения
Вы получили ДвоичныеДанные. Сохраните их в файл при помощи метода Записать ДвоичныеДанныеКартинки.Записать(ПутьКФайлу);
Дальше поместите в ХранилищеЗначения и файл с диска удалите, чтобы не засорять диск. Ну или переделайте систему, чтобы файлы хранились на диске. а не в базе
Ну или переделайте систему, чтобы файлы хранились на диске. а не в базе
честно говоря, такое себе решение -- хранить что-то вне базы, это такой "клюшечный" вариант , т.к. 7.7 не умела в blob-поля (binary loading object), но и там был вариант, например, конвертировать двоичные файлы в текст mime/base64 и хранить в memo-полях, которые поддерживались в dbf
но так оно хоть не потеряется при возможном переносе базы, особенно, если делать его будет кто-то, кто не знаком с тонкостями устройства местной БД
andytg @ Вчера, 22:51
, Странно, что разработчики БСП не поддерживают Ваше мнение и дают хранить присоединенные файлы на диске. а не загружать в базу. У меня есть клиент, у которого и картинки были в базе, и вложения писем. В какой-то момент эти бинарные файлы занимали больше 80% размера базы. Ну а сложности переноса я не видел. Так же, как бэкап базы делался бэкап папки с файлами, даже если сразу забудешь развернуть, то быстро исправишь. Надеюсь, что бэкапы не являются "таким себе решением"?
Vofka @ Сегодня, 7:48
, Мне всегда казалось, что чем меньше база, тем легче с ней работать и ее обслуживать, особенно это касается MS SQL. С одной стороны, вроде как, идет борьба, чтобы не дублировать сущности в базе данных, а с другой кладем кирпич в несколько Гб.
Почти ветеран
Группа: Местный
Сообщений: 522
Спасибо сказали: 136 раз
Рейтинг: 138.7
Цитата(andytg @ 28.05.25, 22:51)
честно говоря, такое себе решение -- хранить что-то вне базы, это такой "клюшечный" вариант smile.gif, т.к. 7.7 не умела в blob-поля (binary loading object), но и там был вариант, например, конвертировать двоичные файлы в текст mime/base64 и хранить в memo-полях, которые поддерживались в dbf
Константа "ХранитьФайлыВТомахНаДиске"???
Я можу зробити цю роботу: - Швидко - Якісно - Дешево
У нас здесь своя атмосфера...
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8
Цитата(xlmel @ 29.05.25, 10:10)
Мне всегда казалось, что чем меньше база, тем легче с ней работать и ее обслуживать, особенно это касается MS SQL.
Что вы вкладываете в понятие "легче с ней работать и ее обслуживать"? И не надо ли вам как-то обслуживать каталог с картинками: настроить доступ с разных устройств (если вы работаете через тонкий клиент в браузере с разных регионов, как папку нормально пошарить между всеми?), настроить какие-никакие права (чтобы кто-то не зашел и не поудалял там все), бекапить и т.п.?
Цитата(xlmel @ 29.05.25, 10:10)
С одной стороны, вроде как, идет борьба, чтобы не дублировать сущности в базе данных, а с другой кладем кирпич в несколько Гб.
Какая связь между "дублированием сущностей" и "несколько ГБ" места в БД? Картинки в БД это дубли чего?
Вы выше писали:
Цитата(xlmel @ 28.05.25, 11:46)
в свое время пришлось вычищать людям базу, когда таких картинок стало под 10Гб в ней
А какие проблемы с этим были?
Я не докапываюсь, мне дейсвительно интересно послушать мнения на этот счет.
И не надо ли вам как-то обслуживать каталог с картинками: настроить доступ с разных устройств (если вы работаете через тонкий клиент в браузере с разных регионов, как папку нормально пошарить между всеми?), настроить какие-никакие права (чтобы кто-то не зашел и не поудалял там все), бекапить и т.п.?
вот это самая главная засада при хранении чего-то (картинок/доков/писем) вне базы
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!