powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Получение изображений номенклатуры из 1с (база в MS SQL)
13 сообщений из 13, страница 1 из 1
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38546900
bozhday
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Я думаю вопрос уже избитый, но, тем не менее, я не нашел на него на форуме ответа.
Исходный данные: 1C Предприятие 8.2, Управление торговлей 10.3, база на MS SQL 2008.
Мне необходимо сделать asp.net веб-сервис который по ID номенклатуры/изображения (из Справочник_ХранилищеДополнительнойИнформации) отдавал картинку.
Все что я пока знаю, что картинка хранится в таблице _ReferenceXXX в поле типа image. Может кто-то поделится кусочком кода, как вытащить из этого поле изображение (не прибегая к функциям 1C) и отобразить его?

Заранее благодарен.
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38546963
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bozhdayДобрый день!

Я думаю вопрос уже избитый, но, тем не менее, я не нашел на него на форуме ответа.Может потому, что не то/не там искали?Исходный данные: 1C Предприятие 8.2, Управление торговлей 10.3, база на MS SQL 2008.
Мне необходимо сделать asp.net веб-сервис который по ID номенклатуры/изображения (из Справочник_ХранилищеДополнительнойИнформации) отдавал картинку.
Все что я пока знаю, что картинка хранится в таблице _ReferenceXXX в поле типа image. Может кто-то поделится кусочком кода, как вытащить из этого поле изображение (не прибегая к функциям 1C) и отобразить его? Если не прибегая к функциям 1с, то почему вопрос в форуме таки по 1с? Почему не в форуме по Ms SQL?
Так же, как и любое другое поле.
Код: sql
1.
select < поле типа image> from _ReferenceXXX
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547021
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем в хранилище храните?... У меня все файлы отдельно. В 1с только ссылка.
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547026
bozhday
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей, я сам виноват, немного не точно выразился. Выбрать данные из базы нет проблем, проблема это поле преобразовать в картинку. Похоже 1c как-то хитро хранит это поля (или преобразует перед записью) и прямое преобразование byte[] в Response нужного типа картинку не дает. Поэтому прошу помощи у людей, которые с этой задачей сталкивались.
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547042
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bozhdayСергей, я сам виноват, немного не точно выразился. Выбрать данные из базы нет проблем, проблема это поле преобразовать в картинку. Похоже 1c как-то хитро хранит это поля (или преобразует перед записью) и прямое преобразование byte[] в Response нужного типа картинку не дает. Поэтому прошу помощи у людей, которые с этой задачей сталкивались.Ну так для начала сравните набор байтов, который Вы туда кладете с набором, полученным обратно, для выяснения наличия и возможности выполнить такое преобразование.
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547055
bozhday
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1сА зачем в хранилище храните?... У меня все файлы отдельно. В 1с только ссылка.

К сожалению, я с 1с знаком лишь первую неделю (основная специализация другая) и тем более база уже заполнена заказчиком. Поэтому, я использую лишь то, что есть. Согласен, ваше решение было бы намного интуитивней для моей задачи, но, похоже, исходные данные у меня в другом формате.
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547059
bozhday
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну так для начала сравните набор байтов, который Вы туда кладете с набором, полученным обратно, для выяснения наличия и возможности выполнить такое преобразование.
Сравнивал уже, данные отличаются. Поэтому и сделал вывод, что 1c преобразует данные перед записью.
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547062
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bozhdayНу так для начала сравните набор байтов, который Вы туда кладете с набором, полученным обратно, для выяснения наличия и возможности выполнить такое преобразование.
Сравнивал уже, данные отличаются. Поэтому и сделал вывод, что 1c преобразует данные перед записью.Чем/как отличаются?
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547083
bozhday
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizovbozhdayпропущено...

Сравнивал уже, данные отличаются. Поэтому и сделал вывод, что 1c преобразует данные перед записью.Чем/как отличаются?

Банально размером: исходная картинка 4557 байта, в поле базы кладется 4122 байта.
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547098
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bozhdaySergey Sizovпропущено...
Чем/как отличаются?

Банально размером: исходная картинка 4557 байта, в поле базы кладется 4122 байта.Всё надо тянуть клещами? Кому это надо - Вам или нам? Что есть исходная картинка? Какой формат? Где смотрится? Как определяли размер? Что еще выяснили? Или сил хватило только на выяснение разницы размеров? Или Вам самим ничего делать не хочется кроме получения готового решения на блюдечке с каемочкой?
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547136
bozhday
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizovbozhdayпропущено...
Банально размером: исходная картинка 4557 байта, в поле базы кладется 4122 байта.Всё надо тянуть клещами? Кому это надо - Вам или нам? Что есть исходная картинка? Какой формат? Где смотрится? Как определяли размер? Что еще выяснили? Или сил хватило только на выяснение разницы размеров? Или Вам самим ничего делать не хочется кроме получения готового решения на блюдечке с каемочкой?
Сергей, зачем вы сразу нападаете? Как вы мне вопрос задаете, так я вам и отвечаю. Представьте, да, хочется сэкономить время, поэтому и спрашиваю у людей, которые по этой дороге уже проходили. Сами в такой ситуации не были?

Исходная картинка до заливания в базу: jpg - 4557 байт.
На выходе из базы: 4122 байт (смотрю под отладчиком кол-во прочитанных байт из запроса в базу)

Помимо этого одни источники говорят, что якобы файлы перед записью кодируются в base64 ( http://www.sql.ru/forum/914152/kartinki-v-baze-1s?hl=???????? ms sql), а другие ( http://igorus1977.ya.ru/replies.xml?item_no=1462), что:
"Удалось заметить, что в поле базы данных несжатое изображение хранится в следующем виде: начиная с байта 0x64 8 байт посвящены размеру изображения, а затем идет само изображение." Пробовал и тот и другой вариант - не работает.
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547493
baclanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bozhday, чем не нравится 1С?
Прекрасно возвращает содержимое файла строкой, результат достаточно преобразовать Convert.FromBase64String, чтобы получить бинарный файл. Например можно вызвать через веб-сервис 1с:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Функция ПолучитьФайлХранилища(UID1C, StorageID, RowID) Экспорт
	  ФайлКакСтрока="";
	  Попытка
	  guidVal=Новый УникальныйИдентификатор(UID1C);
	  Если StorageID="ДиагностическийЛист" Тогда
		 Ссылка=Документы.ДиагностическийЛист.ПолучитьСсылку(guidVal); 
		 Док=Ссылка.ПолучитьОбъект();
		 ТекСтрока = Док.СписокФайлов[Число(RowID) - 1];
		 СсылкаФайл = ТекСтрока.Файл.Файл.Получить();
	 КонецЕсли;
	 
	 Если ТипЗнч(СсылкаФайл) = Тип("ДвоичныеДанные") Тогда
		ФайлКакСтрока=Base64Строка(СсылкаФайл);
	 ИначеЕсли ТипЗнч(СсылкаФайл.Хранилище) <> Тип("ДвоичныеДанные") Тогда
		ФайлКакСтрока=Base64Строка(СсылкаФайл.Хранилище.Получить());
	 Иначе
		ФайлКакСтрока=Base64Строка(СсылкаФайл.Хранилище);
 	 КонецЕсли;
	    
	  Возврат ФайлКакСтрока;
  	Исключение
	   Возврат ФайлКакСтрока;
	КонецПопытки;
	
КонецФункции



Здесь "ДиагностическийЛист" документ с табличной частью "СписокФайлов",
UID1C - 1с-ный гуид, который можно получить из поля _IDRRef:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE FUNCTION [dbo].[RRefToGuid1c](@UUID binary(16))
RETURNS CHAR(36)
WITH SCHEMABINDING 
AS
BEGIN
declare @buffer varchar(40)
select @buffer = replace(convert(varchar(40),cast(@UUID as uniqueidentifier)), '-', '')

RETURN right(@buffer, 8) + '-' +
substring(@buffer, 21, 4) + '-' +
substring(@buffer, 17, 4) + '-' +
substring(@buffer, 7, 2) +
substring(@buffer, 5, 2) + '-' +

substring(@buffer, 3, 2) +
substring(@buffer, 1, 2) +
substring(@buffer, 11, 2) +
substring(@buffer, 9, 2) +
substring(@buffer, 15, 2) +
substring(@buffer, 13, 2)
END

GO



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  <WebMethod()> _
    Public Function GetPhotoFromDiagnosticLeaf(UID1C As String, RowID As String) As String
        Dim sImage As String = vbNullString
        Try
            Dim MyWS As wrStorageValues.StorageValues = New wrStorageValues.StorageValues
            Dim MyAuth As NetworkCredential
            MyAuth = New NetworkCredential
            MyAuth.UserName = "Пользователь"
            MyAuth.Password = "Пароль"
            MyWS.Credentials = MyAuth
            sImage = MyWS.GetFile(UID1C, "ДиагностическийЛист", RowID)
        Catch ex As Exception
            Dim httpResponse = HttpContext.Current.Response
            httpResponse.Clear()
            httpResponse.StatusCode = 500
            httpResponse.StatusDescription = ex.Message
        End Try
        Return (sImage)
    End Function
...
Рейтинг: 0 / 0
Получение изображений номенклатуры из 1с (база в MS SQL)
    #38547558
bozhday
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baclanovbozhday, чем не нравится 1С?
Прекрасно возвращает содержимое файла строкой, результат достаточно преобразовать Convert.FromBase64String, чтобы получить бинарный файл. Например можно вызвать через веб-сервис 1с:


baclanov, спасибо за вариант реализации. Дело в том, что у меня есть доступ только к базе данных MS SQL на чтение (такой был уговор с работодателем). И он меня на 99% устраивает, так как текстовые данные оттуда я понимаю откуда брать. Мне осталось решить вопрос только с чтением бинарников и задача будет решена. Тем более что данные я получаю, не могу их только преобразовать в исходный, читабельный вид. Не хотелось бы только ради этого привлекать ресурсы 1с и вести новые переговоры с заказчиком.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Получение изображений номенклатуры из 1с (база в MS SQL)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]