gifts2017

TECDOC. Поиск запчастей по конструкционным номерам

Опубликовал Игорь (6есик) в раздел Обмен - Обмен с другими системами

Хочу поделиться своим опытом реализации взаимодействия 1С и базы TecDoc, в надежде, что кому-то эта статья сможет сэкономить драгоценное время.

Реализацию задачи по поиску аналогов разбиваем на 3 части:

  1. Подключение к базе TecDoc.
  2. Формирование запросов к нужным данным из базы TecDoc.
  3. Отображение картинок запчастей и брендов из базы на форме обработки.

Первая и самая простая часть это подключение к базе, нашел довольно быстро в интернете:

Процедура ПодключитьсяTECDOC() Экспорт  
	
	Если ЗначениеНеЗаполнено(СтрокаПодключения) Тогда
		СтрокаПодключения = "Driver=Transbase ODBC TECDOC CD 2_2015;SERVER=localhost;Database=TECDOC_CD_2_2015;Uid=tecdoc;PWD=tcd_error_0;";
	КонецЕсли;
	Connection = Новый COMОбъект("ADODB.Connection");
	Connection.CommandTimeOut= 30;
	Попытка
		Connection.Open(СтрокаПодключения);
		Command = Новый COMОбъект("ADODB.Command");
		Command.ActiveConnection = Connection;
		RS =  Новый COMОбъект("ADODB.Recordset");
	Исключение
		Сообщить("Не могу подключиться к базе TECDOC !!!");
		Возврат;
	КонецПопытки;

КонецПроцедуры

Со второй частью пришлось повозиться немного дольше. Нужно было понять, к каким таблицам нужно обращаться и какие данные вытаскивать из базы. Поиск в интернете дал свои результаты – программу, с помощью которой  удалось отловить запросы TecDoc-а   (ODBC Monitor):

Дойдя до третьей части, я уже думал, что там осталось понтик работы - отобразить картинки на форме. С картинками брендов действительно все легко получилось:

ЭлементыФормы.КартинкаЛого.Картинка = Новый Картинка(Base64Значение(ВСтрокуBase64(ТД.ДанныеКартинкаЛого)));

Преобразовали из двоичных данных в картинку и вывели на форме, а вот с картинками запчастей, оказалось все намного сложнее – в двоичном виде в базе лежат картинки формата jp2 (JPEG2000), и как отобразить такую бяку - непонятно.

В итоге, как оказалось, это можно сделать даже несколькими способами:

  1. Сохранить в файл, и воспользоваться какой-нибудь утилитой для конвертирования.
  2. Найти ActiveX компонент для отображения графических изображений с поддержкой jp2.

Что первый, что второй способ подразумевает кроме самой обработки таскать еще конвертер с собой или устанавливать ActiveX компоненту (ActiveX, чтобы была бесплатной и поддерживала jp2, так и не нашел, но с демо версиями пробовал – использовать можно – но неудобно)

В итоге решил отображать такие картинки в «Поле HTML Документа» средствами HTML+JavaScript.

Добавил в обработку макет с javascript библиотекой OpenJPEG, и макет самой HTML страничкой.

Еще нюанс, чтобы сам js движок в «Поле HTML Документа» поддерживал функции  javascript библиотеки OpenJPEG, дописал в HTML тег:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

И сама процедура выглядит так:

Процедура ВывестиКартинкуВHTML(Куда,Данные)
	КодСкрипта = "var array_data = window.atob('"+стрЗаменить(ВСтрокуBase64(Данные),Символы.ПС,"'+"+Символы.ПС+"'")+"');DecodeAndDraw(base64ToArrayBuffer(array_data));";
	Страничка = СтрЗаменить(ПолучитьМакет("html").ПолучитьТекст(),"ЗаменитьНаЛибу",ПолучитьМакет("Openjpeg_js").ПолучитьТекст());
	Страничка = СтрЗаменить(Страничка,"ЗаменитьНаКод",КодСкрипта);
	Куда.УстановитьТекст(Страничка);
КонецПроцедуры

Скачать файлы

Наименование Файл Версия Размер
ПоискПоTecDoc 31
.epf 117,86Kb
18.12.15
31
.epf 1 117,86Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Денис Суходулов (DC) 19.12.15 19:18
Обратите внимание на http://infostart.ru/public/417866/
Эта консоль появилась как раз в результате ковыряний TecDoc...=) С jp2 я разбирался при помощи этой штуки http://www.xnview.com/en/nconvert/
Это консольный графический конвертер, в общем довольно шустрый...
2. Андрей Тарлыков (Tarlich) 21.12.15 12:10
Может я ошибаюсь, но как правило заказчик в
первую очередь хочет видеть есть ли у него этот товар на остатках
во вторых так же с аналогами .
тут реализовано?
3. Игорь (6есик) 21.12.15 14:51
(2) Tarlich, У меня немного другое ТЗ было, у заказчика уже в базе есть остатки самих ЗЧ и их аналогов, но ему нужна была возможность просматривать какие есть аналоги в базе TecDoc и возможность добавлять новые карточки зч нужных брендов себе в базу с добавлением в таблицу аналогов нужной запасной части.

Тем более ведь конфигурации для автомобильного бизнеса разнообразные то зеленая кнопка добавления карточки будет работать в конфе заказчика, а все остальное универсальное и будет работать в любой другой конфе.

Целью публикации является описание реализации взаимодействия, и сама обработка является не более чем примером где реализован механизм описанный в статье.
4. Ivan Yurev (Ivan48) 02.07.16 00:07
У меня пишет "ошибка формата потока". Может в старой версии открываю, или файл битый? У Вас в какой версии работает?
5. Игорь (6есик) 02.07.16 08:43
В 1с 8.2-8.3 должно работать посмотрите по размеру файла - нормально ли он скачался ?
Ну и судя со строки подключения что в обработке это работает с TecDoc за второй квартал 15го года. С более новыми не пробовал - там много качать - так что если кто пробовал отпишитесь нормально ли работает.
6. Ivan Yurev (Ivan48) 06.07.16 22:06
Да в 8.3 открывается, значит моя версия 8.2 старовата. Перенес все в 8.2 по кусочкам.
7. Женя (vas2005) 20.10.16 16:35
Доброго времени суток!
Скачал вашу обработку, но при переходе по результатам поиска выдает "ошибка сценария".
насколько я понимаю, не может отобразить картинку товара. ТОли скрипт что-то делает не то, то-ли не хватает какого-то компонента??????

Зарание спасибо за ответ!

PS.
Так же была ошибка при запуске "ошибка формата потока"
она проявляется на версии 1C 8.2.13.219 на другой 1C 8.2.19.121 все запустилось!
Для версии 1C 8.2.13.219 пришлось перенести обработку вручную и малость подпилить код
Если ЗначениеНеЗаполнено(СтрокаПодключения) Тогда
		СтрокаПодключения = "Driver=Transbase ODBC TECDOC CD 2_2015;SERVER=localhost;Database=TECDOC_CD_2_2015;Uid=tecdoc;PWD=tcd_error_0;";
	КонецЕсли;
...Показать Скрыть

Пришлось заменить на:
Если СтрокаПодключения=Неопределено тогда
		СтрокаПодключения = "Driver=Transbase ODBC TECDOC CD 2_2015;SERVER=localhost;Database=TECDOC_CD_2_2015;Uid=tecdoc;PWD=tcd_error_0;";
	КонецЕсли;
...Показать Скрыть


подобные манипуляции пришлось сделать везде где было выражение
Если ЗначениеНеЗаполнено()
Прикрепленные файлы:
8. Игорь (6есик) 21.10.16 09:15
Скорее всего у вас IE меньше 10 версии на компе - попробуйте поставить 10 или 11.
9. Женя (vas2005) 21.10.16 17:09
А если у артикула несколько картинок, как просмотреть другие..???