Имя: Пароль:
1C
1С v8
Конвертация фотографий в 16 ричный формат?
, ,
0 Pasha_Nik
 
06.05.15
13:17
В 1С есть возможность получить двоичный код картинки

Можно ли в 1С получить 16-ричный код картинки?
1 H A D G E H O G s
 
06.05.15
13:19
(0) Отличная идея, запишем!
2 Asmody
 
06.05.15
13:23
Лучше всего, конечно, 36-ричный код картинки.
3 Garykom
 
гуру
06.05.15
13:25
(2) x64, не меньше!
4 Garykom
 
гуру
06.05.15
13:36
(0) Base64?
5 Fish
 
06.05.15
13:38
(0) Можно хоть пятеричный. В школе проходили системы счисления?
6 Pasha_Nik
 
06.05.15
13:41
А как перевести в 36 - ричный код?
7 Rebelx
 
06.05.15
13:43
мне больше нравится 69ричный
8 Pasha_Nik
 
06.05.15
13:45
Мне нужно этот код вставить
в базу SQL Server в поле с типом image
9 Fish
 
06.05.15
13:45
(6) Можно воспользоваться школьными знаниями: http://matworld.ru/calculator/perevod-chisel.php
10 Ващета
 
06.05.15
13:45
(8) с этого и надо было начинать
11 DGorgoN
 
06.05.15
13:45
(0) А теперь после всех издевательств объясняем что в итоге нужно то, т.е. поясняем что есть в понимании ТС "16-ричный код картинки"?
12 DGorgoN
 
06.05.15
13:47
13 Pasha_Nik
 
06.05.15
14:17
Написал обновление картинки через Stream

Stream=Новый COMОбъект("ADODB.Stream");
    Stream.Type=1;
    Stream.Open();
    Stream.LoadFromFile("C:\БылЗвонок.bmp");
    Connection=Новый COMОбъект("ADODB.Connection");
    Connection.Open("Provider=SQLOLEDB.1; Data Source=NEXTGEN; Initial Catalog=MyBase; User ID=sa;");
    RecordSet=Новый COMОбъект("ADODB.Recordset");
    RecordSet.CursorLocation=3;
    RecordSet.LockType=2;
    Запрос="Select data from dbo.MyTable";
    RecordSet.Open(Запрос, Connection);
    Если RecordSet.RecordCount=0 Тогда
        RecordSet.AddNew();
   //    RecordSet.Fields(0).Value=1;

    Иначе
        RecordSet.MoveFirst();
    КонецЕсли;
    RecordSet.Fields("Data").Value=Stream.Read(-1);
    RecordSet.Update();
    Stream.Close();

выдает ошибку

Ошибка при вызове метода контекста (Update): Произошла исключительная ситуация (Microsoft Cursor Engine): Недостаточные сведения о ключевом столбце для обновления.

Почему возникает такая ошибка?
14 Rebelx
 
06.05.15
15:18
(13) может ты опишешь задачу?
15 Garykom
 
гуру
06.05.15
15:19
(14) зачем? тут ведь сплошные телепаты...
16 mehfk
 
06.05.15
15:20
17 Pasha_Nik
 
06.05.15
15:57
Есть фотографии сотрудников нужно переенести эти фотографии
в базу SQL Server в поле image

Делаю запрос по фотографии получаю её двоичный данные

Фотография = Фотография.ПолучитьДвоичныеДанные();

Сохраняю их в каталог

НоваяКартинка = Новый Картинка(Фотография);
НоваяКартинка.Записать("c:\Картинки\" + Строка(ТабНомер) + ".bmp");

и пытаюсь обновить их в таблице SQL

Stream=Новый COMОбъект("ADODB.Stream");
                Stream.Type=1;
                Stream.Open();
                Stream.LoadFromFile("c:\Картинки\" + Строка(ТабНомер) + ".bmp");
                Connection=Новый COMОбъект("ADODB.Connection");
                Connection.Open("Provider=SQLOLEDB.1; Data Source=192.168.0.2; Initial Catalog=Baze1; User ID=sa; PWD=nix");
                RecordSet=Новый COMОбъект("ADODB.Recordset");
                RecordSet.CursorLocation=3;
                RecordSet.LockType=2;
                //ЗапросДля="Select PORTRET from dbo.STAFF";
                ЗапросДля="Select PORTRET from dbo.STAFF where TABEL_ID = '" + Строка(ТабНомер) + "'";
                RecordSet.Open(ЗапросДля, Connection);
                Если RecordSet.RecordCount=0 Тогда
                   // RecordSet.AddNew();
               //    RecordSet.Fields(0).Value=1;
            
                Иначе
                    RecordSet.MoveFirst();
                КонецЕсли;
                RecordSet.Fields("PORTRET").Value=Stream.Read(-1);
                RecordSet.Update();
                Stream.Close();


Выдает ошибку
Ошибка при вызове метода контекста (Update): Произошла исключительная ситуация (Microsoft Cursor Engine): Недостаточные сведения о ключевом столбце для обновления.
18 Fragster
 
гуру
06.05.15
16:07
есть мнение, что у тебя там кроме поля PORTRET есть еще поле id или подобное
19 vhl
 
06.05.15
16:08
(17) Наверное надо посмотреть ключевые поля этой таблицы
20 Pasha_Nik
 
06.05.15
16:11
Есть ещё и другие поля
21 fisher
 
06.05.15
16:11
(17) Мне сложно понять ход твоей мысли, в процессе которого ты решил, что во всём виноваты системы исчисления.
22 Pasha_Nik
 
06.05.15
16:35
Есть поле ID_STAFF
как правильно написать RecordSet.Update()?
23 DmitrO
 
06.05.15
16:45
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandText = "update STAFF set PORTRET = ? where TABEL_ID = ?";
ParPORTRET = Command.CreateParameter(, 205, 1, -1);
ParTABEL_ID = Command.CreateParameter(, 200, 1, 20); //varchar(20) - возможно тут что-то другое
Command.Parameters.Append(ParPORTRET);
Command.Parameters.Append(ParTABEL_ID);

ParPORTRET.Value = Stream.Read(Stream.Size);
ParTABEL_ID.Value = ТабНомер;
Command.Execute();
24 Pasha_Nik
 
07.05.15
08:41
Пишу так

Stream=Новый COMОбъект("ADODB.Stream");
                    Stream.Type=1;
                    Stream.Open();
                    Stream.LoadFromFile("c:\Картинки\" + Строка(ТабНомер) + ".bmp");
                    Connection=Новый COMОбъект("ADODB.Connection");
                    Connection.Open("Provider=SQLOLEDB.1; Data Source=192.168.0.2; Initial Catalog=Pitanie; User ID=sa; PWD=********");
                    
                    Command = Новый COMОбъект("ADODB.Command");
                    Command.ActiveConnection = Connection;
                    Command.CommandText = "update STAFF set PORTRET = ? where TABEL_ID = ?";
                    ParPORTRET = Command.CreateParameter(, 205, 1, -1);
                    ParTABEL_ID = Command.CreateParameter(, 200, 1, 20);//varchar(20) - возможно тут что-то другое

                    Command.Parameters.Append(ParPORTRET);
                    Command.Parameters.Append(ParTABEL_ID);

                    ParPORTRET.Value = Stream.Read(Stream.Size);
                    ParTABEL_ID.Value = ТабНомер;
                    Command.Execute();
                    Stream.Close();


У некоторых сотрудников вставляет все нормально

а у некоторых выдает ошибку
Ошибка при вызове метода контекста (LoadFromFile): Произошла исключительная ситуация (ADODB.Stream): Не удается открыть файл.

Он не находит файл фотографии?
25 Pasha_Nik
 
07.05.15
08:50
Подскажите а можно ли сделать
что бы загружались в Stream двоичный код картинки

Stream.LoadFromFile(Картинка.ПолучитьДвоичныеДанные());
??
26 DmitrO
 
07.05.15
09:08
(24)вероятно у некоторых сотрудников значит нет доступа к c:\Картинки\
(25)нельзя, разработчики платформы 1С считают, что нам это не нужно. Поэтому только через файл:

ИмяВремФайла = ПолучитьИмяВременногоФайла();
Картинка.ПолучитьДвоичныеДанные().Записать(ИмяВремФайла);
Stream.LoadFromFile(ИмяВремФайла);
27 DmitrO
 
07.05.15
09:14
(26)+ уточняю мысль, возможен был бы такой код:

ParPORTRET.Value = Картинка.ПолучитьДвоичныеДанные();

если бы объект ДвоичныеДанные передавался в COM типом (VT_ARRAY|VT_UI1), но это не сделано в платформе.
28 DmitrO
 
07.05.15
09:15
(27)+ таким образом можно было бы обходиться вообще без Stream-а.
29 H A D G E H O G s
 
07.05.15
11:09
(27) Это то как раз не проблема.