|
v7: Пример использования FILESTREAM SQL 2008 r2 для хранения картинок | ☑ | ||
---|---|---|---|---|
0
mvk
15.04.16
✎
12:26
|
Доброго времени суток.
Покажите, плиз, пример кода (1С 7.7 & 1С++) по добавлению и чтению файла. Нужно для: Задача1. Хранить фото брака в привязке к акту ТОРГ-2 в 1С. Задача2. Хранить сканы первички в привязке к документу в 1С. На самом деле это одна и та же задача. Включил FILESTREAM на сервере, создал базу данных, создал таблицу: CREATE TABLE [dbo].[DocsImg]( [ID] [uniqueidentifier] ROWGUIDCOL DEFAULT (newid()) NOT NULL, [IDDOC] [char](9) NOT NULL, [IDDOCDEF] [int] NOT NULL, [ImgNo] [int] NOT NULL, [ImgType] [char](9) NOT NULL, [Img] [varbinary](max) FILESTREAM NULL, CONSTRAINT [PK_Docs] PRIMARY KEY CLUSTERED ([IDDOC] ASC, [ImgNo] ASC) Поля IDDOC, IDDOCDEF - связка с _1sjourn, ImgType - ссылка на справочник с описательными типами файла. Как добавлять файл в таблицу и читать файл из таблицы в 1С7.7-обработке? |
|||
1
mvk
15.04.16
✎
12:40
|
Можно и на 8.х код. Думаю, отличия будут небольшие.
|
|||
2
Злопчинский
15.04.16
✎
12:42
|
Именно в базе надо хранить? почему не юзать хранение обычными файлами?
|
|||
3
mvk
15.04.16
✎
12:47
|
1) Очень много файлов.
2) Мне кажется, что так удобнее. 3) Хочется освоить технологию. |
|||
4
Злопчинский
15.04.16
✎
12:49
|
(3) понял.
чисто интересно - очень много - это сколько? - всегда можно сделать иерархию по датам и т.д. впрочем не суть важно. |
|||
5
Serginio1
15.04.16
✎
12:52
|
||||
6
Serginio1
15.04.16
✎
12:54
|
||||
7
mvk
15.04.16
✎
12:54
|
||||
8
mvk
15.04.16
✎
12:55
|
Хотя тоже вариант. )) Спасибо. Только не останавливайтесь, друзья! ))
|
|||
9
mvk
15.04.16
✎
12:57
|
(4) За 3 года, которые требует налоговая насобиралось 4644843 документа. Каждый на 2 страницы минимум.
|
|||
10
Злопчинский
15.04.16
✎
13:03
|
~6500 документов в день...
кто их у вас там сканирует? ;-) |
|||
11
ДенисЧ
15.04.16
✎
13:05
|
(10) О потоковом сканере, ты, разумеется, никогда не слышал?
|
|||
12
ADirks
15.04.16
✎
13:09
|
вот, нашёл в свалочке. работает или нет - не помню :)
Процедура ВБазу(ИмяФайла) Данные = СоздатьОбъект("BinaryData"); Данные.ЗагрузитьИзФайла(ИмяФайла, 1); Запрос = СоздатьОбъект("ODBCRecordSet"); Запрос.Подготовить("Insert БинарныеДанные (Данные, Дата, Имя) Values (?, GetDate(), '"+ИмяФайла+"')"); Запрос.ДобПараметр(1,19,0,0); Запрос.УстПараметр(1,Данные); Запрос.Выполнить(); КонецПроцедуры Процедура ИзБазы(ИмяФайла) Перем Данные;//:BinaryData Данные = СоздатьОбъект("BinaryData"); Данные = ЗапросСКЛ.ВыполнитьСкалярный("SELECT Данные FROM БинарныеДанные WHERE ID = 4"); Данные.СохранитьВФайл(ИмяФайла, 1); КонецПроцедуры табличка: CREATE TABLE БинарныеДанные ( ID bigint IDENTITY(1,1) Not Null, Дата DateTime Not Null, ТипОбъекта int, Объект char(13), Имя varchar(256), Данные image Not Null ) |
|||
13
Злопчинский
15.04.16
✎
13:10
|
(11) типа поиздевался? ;-)
|
|||
14
Stepa86
15.04.16
✎
13:11
|
на 8ке как то давно делал так. Откуда изначально "подсмотрел" код уже не помню.
Процедура ПоместитьФайлВХранилище(СоединениеАДО, УникальныйИдентификаторФайла, ПолноеИмяФайла) КомандаSQL = Новый COMObject("ADODB.Command"); КомандаSQL.ActiveConnection = СоединениеАДО; КомандаSQL.CommandText = "DELETE FROM FileTable WHERE (FileID='" + УникальныйИдентификаторФайла + "')"; КомандаSQL.CommandType = 1; КомандаSQL.Execute(); //создаем набор записей АДО НаборЗаписей = Новый COMОбъект("ADODB.Recordset"); НаборЗаписей.CursorLocation = 2; НаборЗаписей.Open("FileTable", СоединениеАДО, 0, 4, 2); НаборЗаписей.AddNew(); НаборЗаписей.Fields("FileID").Value = УникальныйИдентификаторФайла; //создаем АДО поток для чтения файла Поток = Новый COMОбъект("ADODB.Stream"); Поток.Type = 1; Поток.Open(); Поток.LoadFromFile(ПолноеИмяФайла); НаборЗаписей.Fields("Object").Value = Поток.Read(); //обновляем набор записей и закрываем его НаборЗаписей.UpdateBatch(); НаборЗаписей.Close(); КонецПроцедуры //ПоместитьФайлВХранилище Процедура УдалитьФайлИзХранилища(СоединениеАДО, УникальныйИдентификаторФайла, ПолноеИмяФайла) КомандаSQL = Новый COMObject("ADODB.Command"); КомандаSQL.ActiveConnection = СоединениеАДО; КомандаSQL.CommandText = "DELETE FROM FileTable WHERE (FileID='" + УникальныйИдентификаторФайла + "')"; КомандаSQL.CommandType = 1; КомандаSQL.Execute(); КонецПроцедуры //ПоместитьФайлВХранилище //забирает файл из хранилища и сохраняет его по указанному пути Процедура ПолучитьФайлИзХранилища(СоединениеАДО, УникальныйИдентификаторФайла, ПолноеИмяФайла) НаборЗаписей = Новый COMОбъект("ADODB.Recordset"); НаборЗаписей.Open("select Object from FileTable where FileID='" + УникальныйИдентификаторФайла + "'", СоединениеАДО); Пока (НаборЗаписей.EOF = 0) Цикл Изображение = НаборЗаписей.Fields("Object").Value; Поток = Новый COMОбъект("ADODB.Stream"); Поток.Type = 1; Поток.Open(); Поток.Write(Изображение); Поток.SaveToFile(ПолноеИмяФайла); НаборЗаписей.MoveNext(); КонецЦикла; КонецПроцедуры //ПолучитьФайлИзХранилища |
|||
15
mvk
15.04.16
✎
13:21
|
(12,14) Спасибо.
(11) Придется не просто потоковый ставить, а еще и штрихкодирование документов постраничное делать. Эта тема еще предстоит ))) Вопрос будет типа "какой софтиной, желательно активх, читать ШК на скане" |
|||
16
Mikeware
15.04.16
✎
13:23
|
(15) покойный Душелов делал распознование ШК на сканах еще году в 2005-м...
|
|||
17
mvk
15.04.16
✎
13:27
|
(16) Я ж не спорю. Покажите, как )))
|
|||
18
Serginio1
15.04.16
✎
13:41
|
(17) Хочешь интеграции смотри в сторону .Net http://catalog.mista.ru/public/238584/
|
|||
19
Serginio1
15.04.16
✎
13:46
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |