Нравится

Поделиться

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С?

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