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