Добрый день!
Появилась необходимость переделать интеграцию с 1С, а именно при импорте продуктов сравнивать не по наименованию, а по коду.
Я создаю объект
refOffering = CreateObject("Reference.ТМЦ");
и по логике чтоб записать код необходимо
refOffering.Код = OfferingCode;
Столкнулся с такой проблемой что в 1С у ТМЦ нет такого реквизита как Код, есть только ШтрихКод, а обычного нет :(
Кто-нибудь сталкивался с этим?
Заранее спасибо!
Технические данные:
Windows XP SP3, MS SQL 2005,
Terrasoft 3.1.0.26
1C 7.7
Нравится
Вы имеете в виду, что среди реквизитов справочника "ТМЦ" в Конфигураторе 1С не отображается реквизит "Код"?
На самом деле, в 1С есть реквизиты, которые обязательно присутствуют в каждом справочнике. Поэтому они не отображаются в списке реквизитов. Это: Код, Наименование, Родитель, Владелец.
Список этих реквизитов Вы можете найти в ветке Справочник->Атрибуты дерева Синтакс-Помощника.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Подскажите пожалуйста что необходимо изменить в коде:
if (refOffering.FindByCode(IntegrationID) = 0) then // Проверка, есть ли в справочнике продукт с таким кодом Message(" Импорт продукта из Terrasoft CRM в 1С - " + OfferingName); // Лог refOffering = DownloadOffering(OfferingName, DefaultUnit, OfferingType); // Функция создания продукта в справочнике 1С SetIntegrationID(dsOffering, refOffering.Code); // Процедура сохранения кода записи интеграции в Terrasoft CRM (код продукта в справочнике 1С), алгоритм приведен и описан выше
чтобы в случае отсутствия кода прекратить импорт с ошибкой
Message(" В 1С нет продукта с таким кодом!");
а не импортировать продукт с террасофта.
Заранее спасибо!
Вместо всего этого кода необходимо написать следующее:
if (refOffering.FindByCode(IntegrationID) = 0) then Message("В 1С нет продукта с таким кодом!"); endif;
Или же, чтобы было более информативно:
if (refOffering.FindByCode(IntegrationID) = 0) then Message("В 1С нет продукта с кодом " + IntegrationID + "!"); endif;
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
"Лабьяк Олег Игоревич" написал:Вместо всего этого кода необходимо написать следующее:if (refOffering.FindByCode(IntegrationID) = 0) then
Message("В 1С нет продукта с таким кодом!");
endif;
Спасибо! Это понятно. Но в таком случае после сообщения о том что нет такого продукта вываливается ошибка выполнения скрипта, т.к. не передается(создается) дальше объект продукта. Интересует как именно остановить интеграцию(выполнения скрипта) без ошибки?
На самом деле, это зависит от реализации интеграции. Для прекращения работы функции и выхода из неё попробуйте
if (refOffering.FindByCode(IntegrationID) = 0) then Message("В 1С нет продукта с кодом " + IntegrationID + "!"); return 0; endif;
Для полного прекращения интеграции необходимо выполнить TS.Logoff(), где TS - объект, созданный с помощью вызова CreateObject("TSDskObjectLibrary.DskConnector"), но это лучше выполнять в конце основной функции интеграции, когда Вы точно уверены, что больше ничего выполнять не нужно.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.