|
Хранение изображений jpg в базе 1с 8.1 | ☑ | ||
---|---|---|---|---|
0
Den Romanoff
10.07.11
✎
03:30
|
Есть самописная конфигурация для учёта заезда/выезда автомобилей. При заезде автомобиля создается документ со следующими реквизитами:
-Марка -Модель -Номер кузова -Транзит Также, данные сохраняются в регистре сведений "Архив машин" с похожими измерениями. В процессе проведения делается снимок с веб-камеры (через ActiveX), который сохраняется на диск. В связи с этим вопрос - как сохранять сделанное изображение в базу (вместе с документом или в архив машин), а не на диск. Чтобы при открытии документа заезда за какую-либо дату можно было сразу посмотреть снимок заезжающей машины? |
|||
1
alex-pro
10.07.11
✎
03:37
|
Дык, храни через ХранилищеЗначения.
|
|||
2
Den Romanoff
10.07.11
✎
03:42
|
Расскажите поподробнее, пожалуйста. Вообще, я программист на С, PHP и Python. Знания по особенностям 1с-программирования в зачаточном состоянии, вот пришлось связаться. Хотя бы с чего начать реализацию моей задачи? Можно ссылки на статейки по теме.
|
|||
3
Den Romanoff
10.07.11
✎
03:47
|
Видите ли, прикрутить activex и заставить его сохранять фотографии с камеры я осилил, а вот структура хранения данных в 1С для меня темный лес.
|
|||
4
IronDemon
10.07.11
✎
03:55
|
||||
5
Den Romanoff
10.07.11
✎
06:08
|
Помещаю в хранилище:
Движение = Движения.АрхивМашин.Добавить(); Движение.Период = ТекущаяДата(); //-------// ФотоМашины= Новый Картинка("C:\carfoto.jpg"); ХранилищеФото = новый ХранилищеЗначения(ФотоМашины); Движение.Фото = ХранилищеФото; А когда пытаюсь достать: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | АрхивМашин.Фото |ИЗ | РегистрСведений.АрхивМашин КАК АрхивМашин |ГДЕ | АрхивМашин.ШтрихКод = &ШК"; Запрос.УстановитьПараметр("ШК",ЭтаФорма.Штрих); Результ = Запрос.Выполнить(); Хранилище = Новый ХранилищеЗначения(Результ.Выбрать().Получить(0)); ЭлементыФормы.Фото.Картинка = Хранилище.Получить(); Ругается на несоответствие типов Где жук? |
|||
6
Grusswelle
10.07.11
✎
06:24
|
(5) Посмотри, каких типов может быть измерение у регистра.
|
|||
7
Den Romanoff
10.07.11
✎
06:33
|
А это и не измерение. У них нельзя выбрать тип ХранилищеЗначения. Я пробовал и ресурсы и реквизиты.
|
|||
8
Den Romanoff
10.07.11
✎
06:38
|
Блин... Как же быть-то?
|
|||
9
Либерал
10.07.11
✎
11:39
|
не надо тебе в регистр через движения картинку..
сделай у самого документа реквизит "фото" с типом ХранилищеЗначения. в запросе получишь Ссылку на документ, потом вытащишь картинку по ссылке примерно так: Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | АрхивМашин.Ссылка //!!!!!!!!! |ИЗ | Документ.АрхивМашин КАК АрхивМашин |ГДЕ | АрхивМашин.ШтрихКод = &ШК"; Результ = Запрос.Выполнить(); Если НЕ Результ.Пустой() Тогда Выборка = Результ.Выбрать(); Выборка.Следующий(); Хранилище = Новый ХранилищеЗначения(Выборка.Ссылка.Фото); ЭлементыФормы.Фото.Картинка = Хранилище.Получить(); |
|||
10
Либерал
10.07.11
✎
11:40
|
если все же очень надо регистр - лучше фото в справочник, а элементы справочника уже в регистр.
|
|||
11
vde69
10.07.11
✎
11:42
|
сделай справочник с 1 реквизитом куда записывай картинку а в регист добавь ссылку на этот справочник
это нужно для того что-бы запросы по регистру не тормазили |
|||
12
milan
10.07.11
✎
12:24
|
у меня в рс хранится строка неограниченной длины сжатая, мож я что- то не так сделал?
|
|||
13
milan
10.07.11
✎
12:28
|
(11) а чего запросы должны тормозить? регистр 2м записей несколько гигов весит, ни списки ни запросы ни формы записи не тормозят
|
|||
14
Den Romanoff
14.07.11
✎
02:18
|
Всё равно, блин, не растет кокос... :(
Вот я сохраняю снимок с камеры на диск: ЭтаФорма.ЭлементыФормы.вк.SaveJPG("C:\carfoto.jpg"); ЭтаФорма.ЭлементыФормы.вк.PreviewStop(); Вот я помещаю его в реквизит документа "заезд" ФотоМашины= Новый Картинка("C:\carfoto.jpg"); ХранилищеФото = Новый ХранилищеЗначения (ФотоМашины); ЭтотОбъект.Фото= ХранилищеФото; Вот пытаюсь его оттуда достать. Но опять возникает несоответствие типов: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | Заезд.Ссылка |ИЗ | Документ.Заезд КАК Заезд |ГДЕ | Заезд.ШтрихКод = &ШК"; Запрос.УстановитьПараметр("ШК",ЭтаФорма.Штрих); Результ = Запрос.Выполнить(); Если НЕ Результ.Пустой() Тогда Выборка = Результ.Выбрать(); Выборка.Следующий(); Хранилище = Новый ХранилищеЗначения(Выборка.Ссылка.Фото); ФотоМашины = Новый Картинка (Хранилище.Получить()); //тут несоответствие ЭлементыФормы.Фото.Картинка = ФотоМашины; КонецЕсли Как только не пробовал: и с использованием Двоичных Данных и в BMP сохранял. Несоответствие, и всё тут. Как же его правильно достать оттуда? |
|||
15
Den Romanoff
14.07.11
✎
04:14
|
Ура! Проблема решилась.
Сохраняю: Фото = Справочники.Фотографии.СоздатьЭлемент(); Фото.Фотография = Новый ХранилищеЗначения(Новый картинка("C:\carfoto.jpg")); Фото.ШтрихКод = Движение.ШтрихКод; Фото.Записать(); Достаю: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | Фотографии.Ссылка |ИЗ | Справочник.Фотографии КАК Фотографии |ГДЕ | Фотографии.ШтрихКод = &ШК"; Запрос.УстановитьПараметр("ШК",ЭтаФорма.Штрих); Результ = Запрос.Выполнить(); Если НЕ Результ.Пустой() Тогда Выборка = Результ.Выбрать(); Выборка.Следующий(); ЭлементыФормы.Фото.Картинка = Выборка.Ссылка.Фотография.получить(); Спасибо всем за помощь! |
|||
16
Маленький Вопросик
14.07.11
✎
05:58
|
(0) а я делал нечто подобное - в году аж 2007-ом!
только я в базе хранил ссылки на фотографии авто, а фотографии хранились в определенном каталоге ну и веб-интерфейс к базе был привязан... |
|||
17
Ювелир
14.07.11
✎
08:31
|
а зачем картинки в базу пихать? Я на файл сервер складываю. Связь либо по ключу составному либо по индексу.
Просто. Надежно. Дешево. |
|||
18
Восточный Парень
14.07.11
✎
08:40
|
У меня в базе даже ссылки не хранятся, а вот при открытии документа есть кнопка, по которой открывается обработка показывающая, а есть ли в специальной базе СКЛ на эту ссылку документа привязанные файлы. Файлы хранятся в базе СКЛ отдельной. При добавлении файла в СКЛ базу загружается файл, ссылка на объект базы 1С, дата вставки, имя пользователя, имя файла.
|
|||
19
Den Romanoff
15.07.11
✎
01:02
|
Машин в день заезжает порядка трёх тысяч. Мне кажется, при таком количестве, хранение в каталоге быстро бы начало глючить.
|
|||
20
i_rodionov
15.07.11
✎
04:30
|
(19) ИМХО, при таком количестве двоичных данных (три тысячи снимков в день) нужно делать отдельную SQL базу. Туда грузить картинки.
(18) Правильное решение. НО!!! Возникает вопрос целостности данных. При архивировании 1С-базы что делать со старыми снимками? Нужна соответствующая обработка, чтобы их тоже удалять или переносить куда-то еще. При удалении отдельного документа из 1С, что делать со снимком к ниму привязанным? Нужна процедура, которая все почистит. Кроме этого нужна отдельная асинхронная задача в 1С, которая периодически проверяет целостность данных. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |