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

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

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

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

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

Процедура ПодключитьсяTECDOC() Экспорт

Если ЗначениеНеЗаполнено(СтрокаПодключения) Тогда
СтрокаПодключения = "Driver=Transbase ODBC TECDOC CD 2_2024;SERVER=localhost;Database=TECDOC_CD_2_2024;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").ПолучитьТекст());
Страничка = СтрЗаменить(Страничка,"ЗаменитьНаКод",КодСкрипта);
Куда.УстановитьТекст(Страничка);
КонецПроцедуры

14 Comments

  1. DC

    Обратите внимание на http://infostart.ru/public/417866/

    Эта консоль появилась как раз в результате ковыряний TecDoc…=) С jp2 я разбирался при помощи этой штуки http://www.xnview.com/en/nconvert/

    Это консольный графический конвертер, в общем довольно шустрый…

    Reply
  2. Tarlich

    Может я ошибаюсь, но как правило заказчик в

    первую очередь хочет видеть есть ли у него этот товар на остатках

    во вторых так же с аналогами .

    тут реализовано?

    Reply
  3. 6есик

    (2) Tarlich, У меня немного другое ТЗ было, у заказчика уже в базе есть остатки самих ЗЧ и их аналогов, но ему нужна была возможность просматривать какие есть аналоги в базе TecDoc и возможность добавлять новые карточки зч нужных брендов себе в базу с добавлением в таблицу аналогов нужной запасной части.

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

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

    Reply
  4. Ivan48

    У меня пишет «ошибка формата потока». Может в старой версии открываю, или файл битый? У Вас в какой версии работает?

    Reply
  5. 6есик

    В 1с 8.2-8.3 должно работать посмотрите по размеру файла — нормально ли он скачался ?

    Ну и судя со строки подключения что в обработке это работает с TecDoc за второй квартал 15го года. С более новыми не пробовал — там много качать — так что если кто пробовал отпишитесь нормально ли работает.

    Reply
  6. Ivan48

    Да в 8.3 открывается, значит моя версия 8.2 старовата. Перенес все в 8.2 по кусочкам.

    Reply
  7. vas2005

    Доброго времени суток!

    Скачал вашу обработку, но при переходе по результатам поиска выдает «ошибка сценария».

    насколько я понимаю, не может отобразить картинку товара. ТОли скрипт что-то делает не то, то-ли не хватает какого-то компонента??????

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

    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;»;
    КонецЕсли;
    

    подобные манипуляции пришлось сделать везде где было выражение

    Если ЗначениеНеЗаполнено()
    Reply
  8. 6есик

    Скорее всего у вас IE меньше 10 версии на компе — попробуйте поставить 10 или 11.

    Reply
  9. vas2005

    А если у артикула несколько картинок, как просмотреть другие..???

    Reply
  10. an2007

    Добрый день, скачал Вашу обработку.

    Ошибка:

    {Форма.Форма.Форма(953,13)}: Переменная не определена (АЙТЕК_Дополнительные)

    Родитель = <<?>>АЙТЕК_Дополнительные.ПолучитьНастройкуСистемы(«ПапкаДляАналоговИзTecDoc»);

    {Форма.Форма.Форма(7,7)}: Процедура или функция с указанным именем не определена (ЗначениеНеЗаполнено)

    Если <<?>>ЗначениеНеЗаполнено(СтрокаПодключения) Тогда

    {Форма.Форма.Форма(942,7)}: Процедура или функция с указанным именем не определена (ЗначениеНеЗаполнено)

    Если <<?>>ЗначениеНеЗаполнено(Аналог) Тогда

    {Форма.Форма.Форма(966,7)}: Процедура или функция с указанным именем не определена (ЗначениеНеЗаполнено)

    Если <<?>>ЗначениеНеЗаполнено(Производитель) Тогда

    Reply
  11. 6есик

    Можете закоментировать всю процедуру — так как она расчитанна под конкретную конфу заказчика — для создания карточки зч. Остальное должно работать без привязки к конфе.

    Reply
  12. Gingeryel

    Ошибка сценария

    Предполагается наличие «}»

    Reply
  13. vas2005

    Доброго времени суток!

    Подскажите, как заставить искать по Артикулу, а не по конструкционному номеру…???

    Если можно сам запрос..

    Зарание спасибо.

    Reply
  14. user930804

    Будет работать с TECDOC CD 2_2016 ?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *