Добрый день!
Необходимо импортировать данные из БД Firebird, которая находится на отдельном сервере, в Terrasoft. В Terrasoft стоит MS SQL. Пробовала через компоненты ADO, не устанавливается соединение. Буду очень благодарна, если подскажите какую-либо идею, возможно существует пример решения.

Нравится

17 комментариев

ADO отличный вариант, но медленный... объемы базы, количество записей какое?
насчет не устанавливается соединение основная проблема видимо в строке соединения? тут масса примеров http://www.connectionstrings.com/

а какой вариант более быстрый?
База достаточно большая, каждый день заносится новая информация и именно эту информацию мне необходимо брать в Terrasoft и формировать на основании ее отчет.
Проблема с соединением именно в строке (спасибо за ссылку!) и в выборе провайдера OLEDB

ODBC из бесплатных проще всего взять "родной" http://www.firebirdsql.org/en/odbc-driver/
Более быстрый будет перенос данных средствами импорта/экспорта на сервере... как вариант написать небольшую утилиту, которая будет запускаться планировщиком и из базы firebird кидать данные в базу SQL Terrasoft...
Если использовать ADO и средства Terrasoft то схема возможна аналогичная, пишем все в рамках Terrasoft, запускаем опять же планировщиком или вручную - подтягиваются свежие данные

Возможен ли такой вариант:
Если все делать через Terrasoft. Подвязать соединение с базой через ADO на кнопку. То есть по требованию пользователя (нажатие кнопки) из Firebird вытягиваются нужные данные и заносятся в Terrasoft
Если это возможно, то у меня возникает вопрос, как соединение через ADOConnection подвязать на кнопку

ADOConnection -> ADODataset. На нажатие кнопки брать экземпляр данного датасета, открывать его, брать из него данные и делать с ними все что угодно:)

ADOConnection -> ADODataset. На нажатие кнопки брать экземпляр данного датасета, открывать его, брать из него данные и делать с ними все что угодно:)

Пытаюсь подключить тестовую базу Firebird.
В ADOConnection ввела строку подключения:
Driver=Firebird/InterBase(r) driver;Uid=SYSDBA;Pwd=masterkey;DbName=D:\TEST\testdb.fdb
При проверке подключения выдает ошибку
"Не выполнена проверка подключения из-за ошибки при инициализации поставщика. [ODBC Firebird Driver] unavailable database"
Подскажите, пожалуйста, как правильно подключиться

база локально на этой же машине по пути D:\TEST\testdb.fdb? Firebird сервер на этой же машине?

да, это тестовый вариант, поэтому все находится локально

пока приходит в голову проверить работает ли firebird сервер вообще (версия?), попробовать получить доступ к этой же локальной базе с помощью например IBExpert
+ там еще точка с запятой в конце строки должна бы быть

локальная версия БД действительно была повреждена. Попробовала подключиться к БД на сервере, получилось!
Спасибо за помощь!

Еще один вопрос. При проверке подключение ADOConnection идет подтверждение, все нормально. А в ADODataset, я указала как соединение ADOConnection и пытаюсь отобразить все поля, но выдается ошибка о том ,что логин пароль базы данных Firebird указаны неверно.

Пришлите скриншоты настроеных ADOConnection и ADODataset

Высылаю скриншоты подключений ADOConnection и ADODataset. Проверка подключения проходит нормально, но добавление полей не происходит. Ошибка возникает когда я пытаюсь в Data Field добавить все поля

Попробуйте следующее:
Настройте имя источника данных [Панель управления]->[Администрирование]->[Источники данных (ODBC)]
В параметрах подключения используйте [Использовать имя источника данных]

На присланных Вами скриншотах плохо видны настройки. Пришлите сервисы используемые Вами с настройками ADO и реализации.

Здравствуйте,
В строке подключения ADOConnection допишите, пожалуйста "localhost:":
Driver=Firebird/InterBase(r) driver;Uid=SYSDBA;Pwd=masterkey;DbName=localhost:D:\TEST\testdb.fdb

Решение в теме http://www.community.terrasoft.ru/forum/topic/6843

Яворский Алексей
Эксперт 3-й линии поддержки

Показать все комментарии

Добрый день!
Пожалуйста, подскажите какие поля необходимо выбрать при импорте конфигурационных единиц КЕ из Excel, чтобы в итоге было видно и влияющие, и зависимые КЕ одной единицы. Например, при выборе КЕ Операционная система, в !Зависимостях! во вкладке Влияющие был сервер, а во вкладке Зависимые - ПО.

Нравится

6 комментариев

В данном случае вам необходимо выполнить настройку интеграции на основе таблицы [Зависимости]. Структура файла Excel должна быть односторонней. Напроимер
Влияющая КЕ
Зависимая Ке

Пример подобной настройки:

А скажите возможно ли сделать импорт из Excel, чтобы в итоге получилось как во вложении?

С помощьюю указанной выше настройки удалось импортировать следующую структуру (рис 2 во вложении).

Структура файла

У меня возник такой вопрос: данные в Excel должны быть взаимосвязаны между собой?

Что Вы подразумеваете под взаимосвязями?
Как видно с скриншотов выше - в колонках Excel должны присутствовать поля в которых указано влияющее КЕ и зависимые КЕ. Соответственно система строит иерархию в зависимости от данных взаимодействий.

Спасибо большое, Николай. Я нашла свою ошибку.

Показать все комментарии

Добрый день,
Пытаемся внедрить Terrasoft Service Desk.
Есть необходимость добавлять группу контактов в Terrasoft Service Desk напрямую через базу по шедулеру, не создавая им логины.
Для этого написан некий SQL-скрипт для добавления необходимой информации в таблицу tbl_Contact. Администраторы спокойно видят все добавленные скриптом контакты и созданные, но обычные пользователи видят только контакты созданные в ручную. Права на все пока по умолчанию, ничего не меняли.
В чем может быть причина? Еще куда то нужно писать информацию о контактах?

Нравится

4 комментария

Необходимо записать информацию о правах на импортированные контакты в таблицу tbl_ContactRight.

Также, вполне возможно, будет необходимо импортировать информацию и на другие детали раздела, такие как: "Средства связи", "Адреса", "Карьера".

"Кулак Олег" написал:Необходимо записать информацию о правах на импортированные контакты в таблицу tbl_ContactRight.
Или настроить права доступа по умолчанию для пользователя, от имени которого выполняется импорт данных.

"Кулак Олег" написал:Необходимо записать информацию о правах на импортированные контакты в таблицу tbl_ContactRight

Спасибо, помогла запись в таблицу tbl_ContactRight

Показать все комментарии

Никак не могу понять почему же не импортируются данные.

-----Импортируются данные из файла 'C:\Documents and Settings\sysadm\Рабочий стол\Конрагенты.xlsx'
Вычитываются данные из листа 'Менеджеры'
Импортируются данные из листа 'Менеджеры'
Импортируются данные в таблицу 'Контакт'
Импортируется запись ФИО = Копыторогатый Василий Петрович
***
***Conversion failed when converting from a character string to uniqueidentifier
***
Импорт данных в таблицу 'Контакт' завершен. Добавлено: 0. Обновлено: 0.
Импорт данных из листа 'Менеджеры' завершен

Табличка простенькая - ФИО, Тип, Контрагент, Средство связи1, Средство связи2

Что я делаю не так и куда копать?

Нравится

4 комментария

В Ваших настройках импорта поле "ФИО" является уникальным? И как настроен импорт поля "Контрагент"? Можете выложить настройки импорта?

Попробуйте проверить формат ячеек для колонки с ФИО в Excel, желательно чтобы был Общий или Текстовый. Еще вариант, в дизайнере настроек импорта удалите колонку Контакт.ФИО, а потом вытяните повторно поле ФИО к данной колонке.

В колонку "Контрагент" необходимо вытянуть и "Контрагент" из таблицы "Контакты", и поле "Название"(Контрагент) из связанной таблицы "Контрагенты".

Очень круто, самый быстрый саппорт ;) Я уже разобрался. Проблема заключалась в моём непонимании связности. Прочитал в блоге Татьяны инструкции и всё понял ;-)

Показать все комментарии

Добрый день!

Расскажите, пожалуйста, есть ли какая либо документация по САБЖу.
И какую последовательность действий в этом вопросе вы порекомендуете.

P.S.: в первую очередь интересует импорт контактов, контрагентов и сделок.

Нравится

5 комментариев

В линейке Microsoft Dynamics несколько продуктов, какой вы имеете ввиду?

Microsoft Dynamics CRM 4.0.7333.2138

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

А цель импорта - это одноразовая загрузка данных или постоянный импорт?

Цель: выполнить разовый импорт в Террасофт максимально возможной информации из Dynamics, чтобы отказаться от Dynamics CRM и перейти на Террасофт XRM без ощутимой потери данных и без необходимости вводить данные, которые уже есть в Dynamics, в Террасофт вручную.

Тогда самый простой вариант - вручную на уровне базы данных.
К сожалению, готовых скриптов нет.
Но со всеми вопросами по структуре данных, взаимосвязях и пр. Вы можете обратиться в нашу службу поддержки - Вам обязательно помогут.

Показать все комментарии

Как при импорте данных из 1С сделать так, чтобы один из контрагентов 1С соответствовал контрагенту TS "Ваша компания"?
пробовал так:

function OnBeforeRecordImport(Param, Dataset, Select1C) {
        if (Param.Obj1C.String(Select1C.Наименование) == 'МойКонтрагент') {
                 Dataset.Values('ID') = '{E308B781-3C5B-4ECB-89EF-5C1ED4DA488E}';
        }
}

а при импорте подчиненных данных (платежные реквизиты):
        if (Param.Obj1C.String(Select1C.QueryLink.Владелец.Наименование) == 'МойКонтрагент') {
                 ShowInformationDialog(Param.Obj1C.String(Select1C.QueryLink.Владелец.Наименование));
                 Dataset.Values('AccountID') = '{E308B781-3C5B-4ECB-89EF-5C1ED4DA488E}';
        }

где {E308B781-3C5B-4ECB-89EF-5C1ED4DA488E} - ID в TS контрагента "Ваша компания".
Вот как раз проблема получилась с платежами, они не импортировались так, как нужно.
И потом есть другие данные которые импортируются и в них есть поле контрагента. Как можно решить это более глобально?

Нравится

5 комментариев

1) Для строковых реквизитов 1С не обязательно использовать функцию Param.Obj1C.String()
можно просто так: Select1C.Наименование == 'МойКонтрагент'

2) Скорей всего ключевые поля при импорте контрагентов у вас UID1C и Object1С.
Вам всего лишь нужно заполнить их.
Для этого нужно узнать UUID вашего контрагента:

   if (Trim(Select1C.Наименование) == 'МойКонтрагент') {
      Log.Write(1, Param.Obj1C.XMLString(Select1C[QueryLink].UUID()));
      // или так Log.Write(1, Param.Record1CID);
   }

И обновить вашу запись в БД:

UPDATE tbl_Account SET UID1C = '{13123123123-312312312-312312}', Object1C = 'Справочник.Контрагенты' WHERE ID = '{E308B781-3C5B-4ECB-89EF-5C1ED4DA488E}'

Спасибо. Сделал немного не так.
1. Обновил запись в БД
2. При обновлении данной записи устанавливаю имя контрагента по-умолчанию (иначе слетит лицензия)

function OnBeforeRecordImport(Param, Dataset, Select1C) {
    if (Dataset.Values('ID') == '{E308B781-3C5B-4ECB-89EF-5C1ED4DA488E}') {
        Dataset.Values('Name') = 'Ваша компания';
    }
}

Можно в настройке соответствия полей, у поля "Наименование" снять галочку "изменять значение поля" - в результате при обновлении записи в ТС это поле не будет изменяться

Можно, но ведь первый раз это поле заполнять надо )))

При добавлении новой записи в ТС, это поле изменится в первый и последний раз.

Показать все комментарии

Нужно импортировать контрагентов и платежные реквизиты из 1С. Структура данных в 1С и TS очень различается, что затрудняет импорт. Сейчас контрагенты импортируются так, как показано на приложенных скриншотах. Хотелось бы чтобы в платежных реквизитах не было отдельной записи с инн, кпп, окпо, а эти данные указывались в каждой записи с банком и р/с. Как такое можно реализовать? То есть главный вопрос тут, как получить доступ, при импорте подчиненной детали, к родительским данным?

Нравится

3 комментария

Очень жду Вашего ответа

Удалите настройку "инн, кпп, окпо".
В скрипте настройки "р/с", в событии BeforeRecordImport
добавьте что-то на подобии:

Dataset('INN') = Select1C.QueryLink.Владелец.ИНН;

Спасибо, помогло.

Показать все комментарии

Добрый день!

Подскажите, пожалуйста, как можно из дампа БД Oracle восстановить одну таблицу? Команда imp tables="tbl_TaskGroup" не проходит, говорит что таблица TBL_TASKGROUP не найдена. Я понимаю что Оракл криво работает с объектами в названии которых присутствуют не только прописные буквы. Но как есть, так есть. Есть ли выход из сложившейся ситуации кроме полного импорта?

Нравится

4 комментария

Попробуйте взять в скобки
imp tables=("tbl_TaskGroup")

К сожалению, не помогло. Еще есть варианты?

Есть решение.
Попробуйте это :wink:
imp tables=\"\""\""tbl_TaskGroup\""\""\""

Мощно! Спасибо, помогло. Один и два раза \" использовать пытался

Показать все комментарии

Добрый день!
Затянули из Екселя 200К контрагентов.
Теперь обнаружили что рассылка по ним не проходит - "У контрагента отсутствует емеил". Хотя при импорте тип связи и адрес емеил затянулись корректно.
Как оказалось сущ. еще доп. таблица AccountCommunication в которую добавляется тип ср-ва связи при изменении контрола "тип ср-ва связи", чего естественно не произошло при импорте ((
Подскажите пожалуйста как быть?
Заранее спасибо!
Версия 3.2 MS SQL 2005

Нравится

4 комментария

Пишем запрос для актуализации данных в tbl_AccountCommunication:smile:
Другого пути, похоже, нет

в аттаче курсор писался когда-то под эти цели (для Контактов). под контрагентов поправите соотвественно

"Александр Кудряшов" написал:Пишем запрос для актуализации данных в tbl_AccountCommunication:smile:
Другого пути, похоже, нет

в аттаче курсор писался когда-то под эти цели (для Контактов). под контрагентов поправите соотвественно

Огромное человеческое спасибо! Вы очень выручили ) :twisted:

Запрос для актуализации данных по Контрагентам

Проблема заключается в том, что при импорте средства связи не подтягиваются из карточки на деталь "Средства связи". Прилагаю два скрипта для контрагентов и контактов. Перед выполнением скриптов рекомендуется сделать бэкап базы.

Показать все комментарии

Добрый день!
Появилась необходимость переделать интеграцию с 1С, а именно при импорте продуктов сравнивать не по наименованию, а по коду.
Я создаю объект
refOffering = CreateObject("Reference.ТМЦ");
и по логике чтоб записать код необходимо
refOffering.Код = OfferingCode;
Столкнулся с такой проблемой что в 1С у ТМЦ нет такого реквизита как Код, есть только ШтрихКод, а обычного нет :(
Кто-нибудь сталкивался с этим?
Заранее спасибо!

Технические данные:
Windows XP SP3, MS SQL 2005,
Terrasoft 3.1.0.26
1C 7.7

Нравится

6 комментариев

Вы имеете в виду, что среди реквизитов справочника "ТМЦ" в Конфигураторе 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.

Показать все комментарии