Не претендую на оригинальность. На сайте уже выложены достойные решения для борьбы с "TECDOC" - //infostart.ru/public/91079/ , //infostart.ru/public/189145/ и др.. Попробовал упростить подход основываясь на принципе,что аналогом детали является деталь с таким же конструкционным номером.
И так (для тех кто первый раз столкнулся)
- Установить TECDOC.
- В Администраторе источников данных ODBC находим источник "Transbase"
( для 64 - разрядных операционок запускаем C:\Windows\SysWOW64\odbcad32.exe)
нажав кнопку "настройка" видим реквизиты подключения к базе, а именно Driver, DataBase,Server, User
копируем и вставляем в аналогичные на вкладке обработки - "Настройки", запоминаем настройки.
- Переходим на вкладку поиск, вводим артикул и... поехали
Используемые запросы (для тех.. чтоб не качать)
- Подключение к базе
ConString = "Driver="+СокрЛП(Driver)+";SERVER="+СокрЛП(Server)+";Database="+СокрЛП(DataBase)+";Uid="+СокрЛП(Vid)+";PWD=tcd_error_0;";
Connection = Новый COMОбъект("ADODB.Connection");
Connection.CommandTimeOut= 30;
Попытка
Connection.Open(ConString);
Сообщить("Ок");
Исключение
Сообщить("Не могу подключиться к базе TECDOC !!!");
Возврат;
КонецПопытки;
- Первый шаг, попытка запроса по конструкционному номеру
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandText = "SELECT DISTINCT
|TOF_BRANDS.BRA_BRAND,
|TOF_SUPPLIERS.SUP_BRAND ,
|TOF_ART_LOOKUP.ARL_SEARCH_NUMBER ,
|TOF_ART_LOOKUP.ARL_KIND,
|TOF_ART_LOOKUP.ARL_ART_ID,
|TOF_ARTICLES.ART_ARTICLE_NR,
|TOF_DES_TEXTS.TEX_TEXT AS ART_COMPLETE_DES_TEXT
|FROM TOF_ART_LOOKUP
|LEFT JOIN TOF_BRANDS ON TOF_BRANDS.BRA_ID = TOF_ART_LOOKUP.ARL_BRA_ID
|INNER JOIN TOF_ARTICLES ON TOF_ARTICLES.ART_ID = TOF_ART_LOOKUP.ARL_ART_ID
|INNER JOIN TOF_SUPPLIERS ON TOF_SUPPLIERS.SUP_ID = TOF_ARTICLES.ART_SUP_ID
|INNER JOIN TOF_DESIGNATIONS ON TOF_DESIGNATIONS.DES_ID = TOF_ARTICLES.ART_COMPLETE_DES_ID
|INNER JOIN TOF_DES_TEXTS ON TOF_DES_TEXTS.TEX_ID = TOF_DESIGNATIONS.DES_TEX_ID
|WHERE
|(TOF_ART_LOOKUP.ARL_SEARCH_NUMBER ="+"'"+Артикул +"') AND"+"
|(TOF_ART_LOOKUP.ARL_KIND IN ('3')) AND
|(TOF_DESIGNATIONS.DES_LNG_ID = 16) ";
В случае пустого результата - делаем вывод что номер не оригинальный - переходим ко второму запросу
- Второй шаг, поиск по номеру артикула (попытка получения ID деталей)
Арт = "'"+Артикул+"'";
Command.CommandText = "SELECT DISTINCT
|TOF_BRANDS.BRA_BRAND,
|TOF_ART_LOOKUP.ARL_DISPLAY_NR,
|TOF_SUPPLIERS.SUP_BRAND ,
|TOF_ART_LOOKUP.ARL_SEARCH_NUMBER ,
|TOF_ART_LOOKUP.ARL_KIND,
|TOF_ART_LOOKUP.ARL_ART_ID,
|TOF_ARTICLES.ART_ARTICLE_NR,
|TOF_DES_TEXTS.TEX_TEXT AS ART_COMPLETE_DES_TEXT
|FROM TOF_ART_LOOKUP
|LEFT JOIN TOF_BRANDS ON TOF_BRANDS.BRA_ID = TOF_ART_LOOKUP.ARL_BRA_ID
|INNER JOIN TOF_ARTICLES ON TOF_ARTICLES.ART_ID = TOF_ART_LOOKUP.ARL_ART_ID
|INNER JOIN TOF_SUPPLIERS ON TOF_SUPPLIERS.SUP_ID = TOF_ARTICLES.ART_SUP_ID
|INNER JOIN TOF_DESIGNATIONS ON TOF_DESIGNATIONS.DES_ID = TOF_ARTICLES.ART_COMPLETE_DES_ID
|INNER JOIN TOF_DES_TEXTS ON TOF_DES_TEXTS.TEX_ID = TOF_DESIGNATIONS.DES_TEX_ID
|WHERE
|(TOF_ART_LOOKUP.ARL_SEARCH_NUMBER = "+Арт+") AND"+"
|(TOF_ART_LOOKUP.ARL_KIND ='1') AND
|(TOF_DESIGNATIONS.DES_LNG_ID = 16) ";
- Деталей с нашим артикулом может быть несколько, в этом случае выводим форму выбора для пользователя.
После выбора, делаем запрос с полученным ID
- Третий шаг, запрос по ID детали
Если таблицаВыбора.Количество() = 1 Тогда
// ИщемДальше = RS.Fields("ARL_ART_ID").Value;
ИщемДальше = таблицаВыбора[0].ИД;
Иначе // пусть выберет пользователь
ИщемДальше = таблицаВыбора.ВыбратьСтроку(" Артиклов - " +Артикул + " несколько - выберите !").ИД;
КонецЕсли;
Если ИщемДальше = Неопределено Тогда Сообщить("Надо было выбрать!"); Возврат; КонецЕсли;
ищем = Формат(ИщемДальше,"ЧГ=0");
Command.CommandText = "SELECT DISTINCT
|TOF_BRANDS.BRA_BRAND,
|TOF_ART_LOOKUP.ARL_DISPLAY_NR,
|TOF_SUPPLIERS.SUP_BRAND ,
|TOF_ART_LOOKUP.ARL_SEARCH_NUMBER ,
|TOF_ART_LOOKUP.ARL_KIND,
|TOF_ART_LOOKUP.ARL_ART_ID,
|TOF_ARTICLES.ART_ARTICLE_NR,
|TOF_DES_TEXTS.TEX_TEXT AS ART_COMPLETE_DES_TEXT
|FROM TOF_ART_LOOKUP
|LEFT JOIN TOF_BRANDS ON TOF_BRANDS.BRA_ID = TOF_ART_LOOKUP.ARL_BRA_ID
|INNER JOIN TOF_ARTICLES ON TOF_ARTICLES.ART_ID = TOF_ART_LOOKUP.ARL_ART_ID
|INNER JOIN TOF_SUPPLIERS ON TOF_SUPPLIERS.SUP_ID = TOF_ARTICLES.ART_SUP_ID
|INNER JOIN TOF_DESIGNATIONS ON TOF_DESIGNATIONS.DES_ID = TOF_ARTICLES.ART_COMPLETE_DES_ID
|INNER JOIN TOF_DES_TEXTS ON TOF_DES_TEXTS.TEX_ID = TOF_DESIGNATIONS.DES_TEX_ID
|WHERE
|(TOF_ART_LOOKUP.ARL_ART_ID = "+ищем+") AND"+"
|(TOF_ART_LOOKUP.ARL_KIND IN ('3')) AND
|(TOF_DESIGNATIONS.DES_LNG_ID = 16) ";
p.s.
Вот, собственно, и все. За оптимальность и красоту не боролся - главное простота отладки.
При внедрении обработки в конфигурацию запретил пользователям вносить номенклатуру вручную, что существенно облегчило борьбу с дублями артикулов и аналогов.