Помогите разрешить кое какую проблему с выгрузкой 1с.
Как известно, в террасофте есть возможность выгрузки контрагентов в 1с. В базе данных имеются соответственно поля ...Объект1с УИД1с и конечно же Код1С. Так вот, все это работает.НО! для одной базы 1с. Есть необходимость выгружать одного контрагента в две базы данных. То есть Либу туда либо сюда, а может даже в обе. Как можно решить данную проблему? Ведь в полях Контрагентов(tbl_Account) есть место только для одной базы... Ну допустим я хочу выгрузитьь и туда и сюда..В поле UID1C соответственно запишется ID объекта 1с либо с той либо с иной базы данных. Как быть помогите пожалуйста! Начальство требует!

Нравится

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

Я вижу пока только 2 варианта:
1) Создать поля Code1C, Object1C, UID1C для второй базы, т.е. Code1CBase2 и т.д. и перенастроить интеграцию с одной из баз на них.
2) Забыть про все эти поля и действовать через универсальное поле, такое как ИНН.

Да, именно по первому варианту и хотел сделать.Добавил поля. Даже сделал выгрузку. Теперь , могу присвоить код. Но никак не могу понять где и как он заполняет поля UID1C и Object1C. Поискал в Администраторе. Нашел только огромную тучу стандартных скриптов, и то прототипы.. А где и как присваивается - непонятно.

А разве не просто в интеграции на настройке полей? По моему там же где и настраиваются все другие поля, просто они по умолчанию сразу проставляются на Code1C и Object1C, надо их просто на свои поменять.
Или я что-то не догоняю?

Ну все верно, прост у нас выгрузка в 1с не через стандартную интеграцию реализована а програмно. Скриптами. В том ся поблема.

А еще я знаю не всю структуру и где менять.Сейчас наткнулся на таблицу AccountBillingInfo там тоже есть Коды 1с И УИДы1С.. И там дублировать получается.. Че то как то все через..

Вопрос остается... Где и как присваевается UID1C и Object1C??? В Синхронизации это не указывается..

В scr_Dataflow1CConsts описаны поля связанные с 1С:

var KeyFieldName1C = 'UID1C';
var KeyFieldName1CCaption = "UID записи в 1C";
var KeyCodeFieldName1C = 'Code1C';
var KeyCodeFieldName1CCaption = "Код записи в 1C";
var KeyDateFieldName1C = 'Date1C';
var KeyDateFieldName1CCaption = "Дата синхронизации записи с 1C";
var KeyObjectName1C = 'Object1C';
var KeyObjectName1CCaption = "Объект 1C";

А их присвоение идет в scr_Dataflow1CUtils.
Например UID1C:

...
var UID1C;
...
UID1C = Param.Obj1C.XMLString(Select1C[QueryLink].UUID());
...
Dataset(KeyFieldName1C) = '{' + UID1C + '}';
...

Вам будет легче все таки копаться не тут, а создать скрипт на интеграцию и присвоить эти поля в OnBeforeRecordImport

Александ конечно предложил интересный и правильный метод решения. В своем сообщение я только дополню и приведу пример Функции OnBeforeRecordImport в части получения из 1С и присвоения в Террасофте полей UID1C и Object1C. Пример получения UID1C и Object1C Справочника 1С "Организации":

function ParseUUIDtoGUID(input) {
	var TrimResult = Trim(input.toString());
	var Result = TrimResult.toUpperCase().replace(/^[\s\r\n]+|[\{\}]|[\s\r\n]+$/g, "");
 
	if ((/[A-F0-9]{8}\-[A-F0-9]{4}\-[A-F0-9]{4}\-[A-F0-9]{4}\-[A-F0-9]{12}/).test(Result)) {
		return Result;
	} else {
		return null;
	}
}
 
function OnBeforeRecordImport(Param, Dataset, Select1C) {
...
        var GUID1C = ParseUUIDtoGUID(Param.Obj1C.String(Select1C.Организация.Ссылка.UUID()));
        if (!IsEmptyValue(GUID1C)) {
                GUID1C = '{' + GUID1C + '}';
        }
...
	TestDS.Values('UID1C') = GUID1C;
	TestDS.Values('Object1C') = Select1C.Организация.Ссылка.Метаданные().ПолноеИмя();					
...
}
Показать все комментарии