TECDOC. Поиск конструкционных номеров

Обработка получает конструкционные номера по артикулу товара. Работает напрямую с базой TECDOC. Можно использовать для создания элемента справочника "Номенклатура" и прописывания аналогов в табличной части элемента.

Не претендую на оригинальность. На сайте уже выложены достойные решения для борьбы с «TECDOC» — //infostart.ru/public/91079/ , //infostart.ru/public/189145/ и др.. Попробовал упростить подход основываясь на принципе,что аналогом детали является деталь с таким же конструкционным номером.


И так (для тех кто первый раз столкнулся)
— Установить TECDOC.
— В Администраторе источников данных ODBC находим источник «Transbase»
  ( для 64 — разрядных операционок запускаем  C:WindowsSysWOW64odbcad32.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. 
Вот, собственно, и все. За оптимальность и красоту не боролся — главное простота отладки.
При внедрении обработки в конфигурацию запретил пользователям вносить номенклатуру вручную, что существенно облегчило борьбу с дублями артикулов и аналогов. 

 

13 Comments

  1. Evgen.Ponomarenko

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

    Reply
  2. legrey

    Хм….:-) даже не знаю, не пробовал. Хороший вопрос, кстати.

    Reply
  3. Evgen.Ponomarenko

    (2)

    Если ключ не нужен — это прорыв ;))) в принципе кряк подойдет )))

    Хотя для серьезной компании — текдок не это роскошь

    Reply
  4. h00k

    (1) Естественно не нужен.

    Ключ проверяется клиентом TecDoc, когда запускается Tof.exe

    Reply
  5. revned

    подскажите как подключать, плиз.

    TecDoc поставил. захожу в администрирование — источники данных odbc но не вижу там никак Transbase.. и соответственно настройки не могу посмотреть. что куда добавить нужно? на какой вкладке хоть? совсем затупил уже. Или ТекДок как-то не так установился.. не могу я понять.

    Reply
  6. legrey

    (5) revned, windows какая ?

    Reply
  7. revned

    (6) 7-ка х86

    Reply
  8. zawwowa

    А под 8.3 есть обработка? Или как переписать?

    Reply
  9. zawwowa

    Ошибка » метод объекта не обнаружен сведенияовнешнейобработке»

    Reply
  10. Alex123456

    А тексты запросов Вы сами писали или где-то нашли?

    Reply
  11. legrey

    (10) Alex123456,

    Не помню. По моему полазил по инету, нашел кусками и переписал по своему

    Reply
  12. soneryk

    Здравствуйте. Скажите, пожалуйста, у меня инсталлирован TecDoc, но в источниках данных ОДБЦ в «администрировании» на вкладке «пользовательское DNS» нет данных по Transbase, а на вкладке «драйвер» Transbase присутсвует в списке, но нет настроек подключения к TecDoc. Где взять настройки для соединения с TecDoc

    Reply
  13. h00k

    (12)soneryk

    на вкладке «пользовательское DNS» нет данных по Transbase

    Пользовательский DSN на то и пользовательский, что пользователь его сам создает.

    И для подключения к TecDoc он, в принципе то, и не нужен.

    Где взять настройки для соединения с TecDoc

    Настройки зависят от того куда и какая версия TecDoc у вас установлена, неизменны только:

    Пользователь — tecdoc

    Пароль — tcd_error_0

    Более или менее универсальная процедура подключения выглядит так

    Процедура ИнициализироватьСоединение(пСервер, пБазаДанных)
    
    лПользователь  = «tecdoc»;
    лПароль   = «tcd_error_0»;
    
    лИмяБазыДанных   = «TECDOC_CD_» +Лев(пБазаДанных,1)+ «_» + Прав(пБазаДанных, 4);
    лДрайверБазыДанных = «Transbase ODBC TECDOC CD » +Лев(пБазаДанных,1)+ «_» + Прав(пБазаДанных, 4);
    
    лСтрокаПодключения  = «DRIVER={«+лДрайверБазыДанных+»};DATABASE=»+лИмяБазыДанных+»@»+пСервер+»;PWD=»+лПароль+»;UID=»+лПользователь+»;»;
    
    лСоединение  = Новый COMОбъект(«ADODB.Connection»);
    лСоединение.ConnectionString = лСтрокаПодключения;
    Попытка
    лСоединение.Open();
    лПодключениеУстановлено = Истина;
    Исключение
    лПодключениеУстановлено = Ложь;
    КонецПопытки;
    
    КонецПроцедуры
    

    Показать

    Где

    пСервер — имя или IP-адрес сервера на котором установлен TecDoc.

    пБазаДанных — Строка содержащая версию каталога, в формате квартал-год

    Reply

Leave a Comment

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