Здравствуйте!

Интегрируеся с 1С 8.3, нужно динамически установить Договор для Счёта.

Для этого нужно

1. Получить контрагента 1С (т.к. договор его)
2. Получить Основной договор этого контрагента

Контрагента получить легко:
var Contragent = Param.Obj1C.Справочники.Контрагенты.НайтиПо[...];

А вот со вторым вариантом становится веселее. Есть следующая функция:

Param.Obj1C.Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию

Она принимает 4 аргумента: Название, точное совпадение, родителя и владельца

Первое, второе и четвёртое нам известно - это "Основной договор", false и контрагент, которого мы получили выше. Но третьего не дано (sic!). Язык 1С позволяет опускать ненужные параметры, но компилятор Террасофта этого сделать не даёт, так что нужно что-то туда вставить.

Вопрос: что?

Я пробовал null, false, 0, {}, Справочники.Контрагенты.ПустаяСсылка(), ""

Всё время жалуется на несоответствие типов.

Нравится

1 комментарий

В разных местах предлагают вроде:

ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка())

Не знаю, можно ли вызвать эту функцию из TS.

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

Приветствую.

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

1С - 8.3
Terrasoft - 3.4

Нравится

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

Это вы вручную добавили 8.3 так? Если да - проверьте таблицу tbl_1CObjectTypesByVersions, скорее всего там нет элементов для 8.3. Скопируйте все элементы для 8.2 но для 8.3 :)

Спасибо за ответ.

Для тех, кто столкнётся с проблемой синхронизации с 1C 8.3:

Сначала читать http://www.community.terrasoft.ru/forum/topic/11733

Потом, совет Дмитрия, который означает: выполнить

INSERT INTO tbl_1CObjectTypesByVersions (ObjectTypeID, VersionID)
SELECT ID, ' Здесь ID нового элемента в перечислении enm_1CVersion ' FROM tbl_1CObjectTypes

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

Всем привет.

При попытке подключения к базе 1С возникает ошибка "Невозможно создание объекта сервером программирования объектов" при попытке создать объект ActiveX (скрипт scr_Dataflow1CUtils_V81 строка #627 Param.Con1C = new ActiveXObject(Param.Version + '.ComConnector'); ).

Синхронизация стандартная.
1С - 8.3
Terrasoft - 3.4

Нравится

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

Максим, необходимо
а) установить утилиту: http://www.community.terrasoft.ua/system/files/1c_230512.zip
Внутри также есть инструкцию по установке.

б) глобальным поиском найти строку
Param.Con1C = new ActiveXObject(Param.Version + '.ComConnector');

и заменить на

//Param.Con1C = new ActiveXObject(Param.Version + '.ComConnector');
Param.Con1C = new ActiveXObject('V83.ComConnector');

Это если быстро.
А вообще желательно добавить в перечисление enm_1CVersion новый элемент, затем в скрипте scr_DataflowUtils подправить функцию GetScriptObjectByVersion:

function GetScriptObjectByVersion(Param) {
	switch (Param.Version) {
	case 'V82': return scr_Dataflow1CUtils_V80V81V82;
		break;	
	case 'V81': return scr_Dataflow1CUtils_V80V81V82;
		break;
	case 'V8': return scr_Dataflow1CUtils_V80V81V82;
		break;
	case 'V77': return scr_Dataflow1CUtils_V77;
		break;
	default: return scr_Dataflow1CUtils_V80V81V82;
		break;		
	}
}

Дмитрий, спасибо за ответ.

"А вообще желательно добавить в перечисление enm_1CVersion новый элемент"

Какой именно элемент?

"затем в скрипте scr_DataflowUtils подправить функцию GetScriptObjectByVersion"

Это нормально, что в этом скрипте нет такой функции?

Максим, нет, не нормально :)
Вы ставили утилиту с комьюнити? Ставьте :)

Какой именно элемент?

элемент 8.3 - свойства такие же как и в 8.2, только наименование 8.3 :) Это для того, что бы в выпадающем списке появилась версия 8.3. А вот в функции уже будет прописано, что если выбрано 8.3. то создавать COM-объект с именем V83.ComConnector, а не V82 (или V81 и т.д.).
Если что не понятно - спрашивайте.

> Вы ставили утилиту с комьюнити? Ставьте :)

Я поставил. Этой функции нет ни в ней, ни в оригинале. Вот их дифф (оригинальный - слева): https://www.diffchecker.com/8scqezvu . Простым поиском можно убедиться, что функции нет.

> элемент 8.3 - свойства такие же как и в 8.2, только наименование 8.3 :) Это для того, что бы в выпадающем списке появилась версия 8.3. А вот в функции уже будет прописано, что если выбрано 8.3. то создавать COM-объект с именем V83.ComConnector, а не V82 (или V81 и т.д.).

Как-то вы противоречите сами себе. Разве это не предполагает, что Param.Version должен быть V83 ? Тогда, учитывая что свойства такие же, как у 8.2, откуда оно возникнет?

Опытным путём установил, что файл не scr_DataflowUtils, а scr_Dataflow1CUtils. Функция в нём такая же, что и у вас в сноске.

В общем, после всех изменений, ошибка та же.

Максим, поставьте отладчик перед строкой:

Param.Con1C = new ActiveXObject(Param.Version + '.ComConnector');

и посмотрите что у вас за значение в переменной Param.Version. Если V82 - значит что-то сделали не так (должно быть V83).
В крайнем случае замените эту строку на

Param.Con1C = new ActiveXObject('V83.ComConnector');

Если и далее будет воспроизводится ошибка, значит у вас в Windows не зарегистрирован COM - объект 1С. Запустите файл Comcntr.dll в папке bin с установленной 1с от имени regsrv32.exe

Да, заработало, спасибо.

Добрый день.
Возник вопрос: Для чего нужна утилита 1С, добавленная выше, и обязательно ли ее устанавливать при переходе на 8.3?

Добрый.
Утилита необходима для интеграции с 1с 8.2. А в этом топике мы обсуждали те мелкие моменты, которые необходимо выполнить чтобы её доработать для интеграции с 1с 8.3.

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