Пытаюсь импортировать данные из 1С с помощью Инструменты->Интеграции
Задача: импортировать данные о Контрагентах
В 1С Справочник Контрагенты имеет поля: "ИНН","КПП","ОКПО","основной банковский счет"-ссылка на справочник "банковские счета" с полями:"р/с", "дата открытия", "дата закрытия","банк"-ссылка на справочник "банки" с полями:"корр.счет", "город", "адрес", "телефон"
В террасофте: Контрагенты и привязанные к ним "платежные реквизиты" в которых все поля из 1С("ИНН","КПП","ОКПО","р/с", "дата открытия", "дата закрытия","банк","корр.счет")
Пока получилось получить только вытащить названия контрагентов.
Есть ли какой-то пример, как такое можно сделать без применения скриптов?

Нравится

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

Антон, если у Вас версия 3.3.2, настроить можно следующим образом. Для импорта банков нужно создать отдельную настройку интеграции, которую выполнять перед импортом детали "Платежные реквизиты". Для импорта самой детали необходимо создать настройку интеграции, дочернюю к уже настроенной Вами настройке импорта контрагентов. Порядок выполнения необходимо установить следующим за Вашей интеграцией и интеграцией справочника "Банки". Её свойства будут примерно такими:

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

Дальше нужно настроить импорт полей детали. При этом необходимо помнить о заполнении обязательных полей, таких как "Юридическое название", "Страна" и т.д.

Спасибо. Частично это решило проблему.
Остались такие проблемы:
1. Получаю ИНН, КПП - одна запись в платежных реквизитах, получаю расчетный счет - вторая запись в платежных реквизитах. Есть ли возможность всё это поместить в один платежный реквизит? Плюс есть такие случаи, когда у контрагента может быть несколько расчетных счетов.
2. Как получить корр.счет? В 1С корр.счет находится: справочник контрагент->справочник банковские счета->справочник банк. Пробовал настроить так:

По первому вопросу: подобная настройка вряд ли получится, так как в 1С расчётный счёт - это элемент справочника, а в детали "Платежные реквизиты" программы Terrasoft используется только номер счёта. Основная проблема в том, что невозможно установить общее ключевое поле для всех реквизитов, так как одни находятся в общей таблице 1С, а другие - в связанной. Если Вы используете продукт TS XRM Bank, возможно, для импорта расчетных счетов лучше использовать деталь "Счета в нашем банке". Если нет - можно создать для них отдельную деталь.

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

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

Нравится

Поделиться

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

Продолжаем разговор. Ниже функция для импорта справочника единиц измерения. Создана по образу и подобию импорта номенклатуры, так что нового там мало. Эту функцию нужно добавить в модуль scr_1CFirstImport.

function ImportUnits(){
    Log.Write(1,'Первичный импорт справочника единиц измерения');
	Log.Write(1,'========================================');
	var Dataset = Services.GetNewItemByUSI('ds_Unit');
	Log.Write(1,'Открытие справочника единиц измерения в 1С...');
    var C1 = FirstImport.Obj1C;
	var Units = C1.Справочники.КлассификаторЕдиницИзмерения;
	var UnitsList = Units.Выбрать();
	Log.Write(1,'Загрузка единиц измерения...');
	var UnitObj;
    var ID;
	while (UnitsList.Следующий()){
	    UnitObj = UnitsList.ПолучитьОбъект();
		if (!UnitObj.ЭтоГруппа){
		    Dataset.Append();
		    ID = Connector.GenGUID();
		    Dataset('ID') = ID;
		    Dataset('IntegrationID') = UnitObj.Код;
	    	    Dataset('Name') = UnitObj.Наименование;
	    	    Dataset('Description') = UnitObj.НаименованиеПолное;
	    	    Dataset('IntegrationDate') = GetTodayDate().getVarDate();
		    Dataset.Post();
			Log.Write(1,Dataset('IntegrationID')+' '+Dataset('Name'));
		}
		System.ProcessMessages();
	}
	Log.Write(1,'==================================================');
    Log.Write(1,'Первичный импорт справочника единиц измерения завершен.');
}

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

Почему после создания СОМОбьекта и подключения к нему нету доступа к справочникам 1С? Например, в вашем же коде:

var Offerings = C1.Справочники.Номенклатура; - undefined.

А инициализация объекта точно прошла нормально? И еще, каким образом инициализировали объект? Как Application или как COMConnector?

Пробовал оба варианты.
C1.Справочники - работает. C1.Справочники.Номенклатура - нет.
Я и выборку пробовал делать из Клиентов. Результат "Таблица не найдена Справочники.Клиенты".

function dataload()
{
	var v8=new ActiveXObject("V81.COMConnector");
	path='E:\\1C\\DB';
	db='TEST';
	user='user1';
	password='123456789a';
	conn = v8.Connect("File=\""+path+""\"";Ref=\""""+db+""\"";Usr=\""""+user+""\"";Pwd=\""""+password+""\"";"");;  

С русскими названиями можно работать только если инициализировали объект Application. Если работа идет с COMConnector, то там все интерфейсы, все процедуры и объекты называются по английски, это надо смотреть SDK по COM-объекту 1С.

По поводу справочников, их правильное название лучше смотреть в самой 1С, например, в конфигураторе.

В тексте указанном выше есть строка
"tab = conn.Справочники.Клиенты;"

У нас в 1С такого справочника нет, есть справочник "Контрагенты".

Большое спасибо! Уже работает.

А почему не работало? :wink:

--
www.it-sfera.com.ua

В приведенным скрипте "ИЗ Справочники.Клиенты" - не верно. Верно"ИЗ Справочник.Клиенты" :smile:

И при работе с V81.Application надо было обращаться к самому объекту Application. Я обращался к Connect как в V81.COMConnector.
Но теперь я во всем разобрался :smile:

P.S. У меня через COMConnector работают процедуры и объекты на русском.

"Домброва Михаил" написал:У меня через COMConnector работают процедуры и объекты на русском.

Странно, а у меня ни в какую не захотел по-русски. Или там написание отличается?

Работает:

function dataload()
{
	var v8=new ActiveXObject("V81.COMConnector");
	connection = v8.Connect("File=\"E:\\1C\\DB\"";"");  

Да. Совершенно верно, я понял свою ошибку. Я к КомКоннектору обращался как объекту самому, а не к Коннекту.

Для работы с СОМ объектом 1С, сама 1С должна быть установлена у меня на компьютере? Или всё таки можно только зарегистрировать сам объект, который лежит где-то на сервере 1С?

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