Продолжаем рассказывать о продукте 1C Connector. Сегодня мы остановимся на одном из наиболее часто используемых сценариев интеграции, который доступен пользователям нашего продукта.
Рассмотрим следующий кейс: менеджер создает счет в системе bpm’online и ему нужно, чтобы он сразу ушел в 1С, а после получения оплаты по этому счету необходимо сразу отобразить это в bpm’online.
Менеджер создает счет в системе bpm’online:
Далее пользователь может подождать экспорта счета в 1С в течение определенного времени, заданного в расписании настроенной интеграции:
Или же может запустить интеграцию вручную:
После этого счет появится в системе 1С. Вместе со счетом будут переданы все связанные сущности, такие как Продукты, Договоры, Контрагенты и т.д., которые вы прописали в настройках синхронизации:
Для интеграции оплаты в bpm’online необходимо провести счет в 1С:
Вся внесенная информация появится уже на стороне bpm’online:
Таким образом, менеджер сразу может увидеть информацию о состоянии и времени оплаты счета.
В скором времени мы расскажем, как можно при помощи нашего коннектора вызывать интеграцию из БП, какие фильтры можно настроить для интегрируемых сущностей и поговорим о множестве иных интересных функций, которые заложены в продукте 1C Connector. Подписывайтесь на обновление материала!
С удовольствием отвечу на все возникающие вопросы!
Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.
Третий день мучаюсь с экспортом контрагентов в 1C. Сам контрагент, включая название передаётся легко, но загвоздка в его деталях - адресах, ИНН и КПП.
Адреса берутся из набора данных ТС "Адреса контрагента", а ИНН и КПП - из "Платежные реквизиты" но экспортируются в самого контрагента. То есть, это, вроде, подчинённые детали, а вроде и нет.
Сейчас детали настроены как подчинённые, чтобы была связь с самим контрагентом. Скорее всего, нужно правильное ключевое поле, которое я не могу подобрать. Всякие ID не будут совпадать, т.к. разные объекты в Террасофт, а других зацепок, по сути, нет.
С ИНН и КПП разобрался программно, а также с произвольной строкой адреса. Теперь осталось только передавать детали адреса - Страну, Город, Улицу и т.д.
По поводу заполнения справочных реквизитов...
Получаете ID страны из детали адреса, далее по этому ID получаете значение в поле UID1C, и далее получаете ссылку на страну в 1с, и кладете её в реквизит...
Примерно так:
var Invoice1C = Param.Obj1C.Документы.Счет;
var InvoiceUID1C = GetDatasetFieldValueByID('ds_Opportunity',
dlData.Dataset('ID'), 'UID1C');
InvoiceUID1C = CreateGUID1C(InvoiceUID1C, Param.Obj1C);
var Link1C = Invoice1C.GetRef(InvoiceUID1C);
> Лично у меня экспорт контрагентов всё одной настройкой...
Да, этот ваш код мне сильно помог, хоть он и не подходит для 1С 8.3, так как "РегистрыСведений.КонтактнаяИнформация" больше не существует, они переехали в справочники.
> Получаете ID страны из детали адреса, далее по этому ID получаете значение в поле UID1C, и далее получаете ссылку на страну в 1с, и кладете её в реквизит...
Интересно. Меня смутило, что механизм интеграции определил эти поля как простые Строки, но попробовать надо.
После записи выполните запрос в 1с и посмотрите что в этом поле. Если ничего - значит не записалось. Возможно срабатывают какие то проверки "перед записью" на стороне 1с?
Ну смотрите, предлагаю сделать так: зайдите в 1с и в меню "Операции" выберите "Обработка". Найдите там "КОнсоль запросов" либо "Консоль отчетов" (если нет - установите), и после записи через ТС выполните в обработке запрос к БД (думаю для файловой БД они тоже работают):
Выбрать ВашРеквизит Из Справочник.ВашСправочник.ВашаТаблЧасть
Где Ссылка.Наименование = "МойКонтрагент"
Если реквизит будет заполнен - значит запись проходит, если нет - значит нет :)
Если проходит - смотрите логику на карточке или в модуле объекта (чтото его при открытии чистит).
Если не проходит (но устанавливает корректно) - значит смотрите события модуля ПередЗаписью - что-то там его чистит.
Если не проходит (и не устанавливается) - скорее всего попутаны типы данных для реквизита.
пс: выполнение 1с-ного кода через COM (Террасофт) также можно отлаживать - погуглите.
Та-да! Всё дело в поле "ЗначенияПолей" (sic!), которое содержит... значения полей! То есть, значения всех остальных полей, у которых есть и свои собственные значения, только в xml формате. Я уже попробовал просто вбить скопированный и подправленный xml, всё загружается. Подробнее инфу можно найти тут: http://forum.aeroion.ru/topic779.html
Спасибо, Дмитрий. Без консоли запросов я бы ещё долго бился бы об это.
Общая картина: Есть настроена интеграция, импорт/экспорт
деталь адресса только импорт, экспорт делается через скрипт. Все бы хорошо, записывает в 1С адреса, но поле Code1C пустое и при импорте создается новая запись.
вот часть кода где записывается адресс в 1С:
var ci1CMain = Param.Obj1C.РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); var ci1C = ci1CMain.Добавить();
ci1C.Объект = Select1C.Ссылка;
ci1C.Тип = metalink;
ci1C.Вид =!AddressType1CLink.Пустая()? AddressType1CLink :null;
ci1CMain.Записать(false);
пример значения поля:"f90039f8-ce1b-11e4-849f-002590a73b07#//#Адрес#//#87d961a6-9e2f-405c-855e-215869755d34#//#"
первую часть(f90039f8-ce1b-11e4-849f-002590a73b07) я могу получить так: Param.Obj1C.XMLString(Select1C.Ref.UUID()).
а как и где получить это:"87d961a6-9e2f-405c-855e-215869755d34"???
Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.
К сожалению - это регистр сведений и в нем нет никакого UID который определит уникальность. Добавьте поле "Значение" и "Тип средства связи" как ключевое, либо перед имопртом очищайте деталь, и загружайте все средства связи по объекту.
Коллеги, на этой неделе прошел вебинар по продукту 1C Connector. Продукт предназначен для настройки интеграции bpm'online и 1С.
Ключевые особенности продукта:
Позволяет настраивать интеграцию bpm'online и 1С без написания кода
Работает с версиями bpm'online 5.X и bpm'online 7.X
Работает с версиями bpm'online on-demand и on-site
Работает со всеми конфигурациями 1С, начиная с 8.1
Работает со доработанными конфигурациями 1С
Можно настраивать расписание (периодичность) импорта
В продукт включена референтная настройка разделов (справочники, синхронизация счетов и контрагентов уже настроена)
Поддерживается работа с табличными частями (например, продукт в счете)
Поддерживается работы с несколькими валютами, контроль оплат по курсу
Механизм агрегации (ниже подробнее)
Фильтры по полям и значениям
Логирование действий менеджеров
Автоматическая проводка в 1С
Импорт/Экспорт иерархических разделов
Выполнение скриптов в 1С
Фильтрация удаленных документов
И многое другое...
Механизм агрегации
Сегодня хочу подробнее рассказать про один из механизмов, используемый в продукте, а именно про агрегацию.
Как известно, в базовой версии bpm'online crm нет раздела для хранения оплат, но зато есть поле "Сумма оплаты" в счете. С другой стороны в 1С наоборот есть несколько типов документов, по которым приходит оплата по счету (платежное поручение, приходный кассовый ордер). Суть механизма заключается в том, чтобы пройти по каждому связанному со счетом документу в 1С и просуммировать все, что нам оплатили. Итоговое значение и заносится в поле "Сумма оплаты" в счете bpm'online. Схематично это выглядит так:
С точки зрения настройки достаточно выполнить следующие шаги:
В интеграции счета добавить агрегирующую колонку:
Выбрать поле счета в bpm'online, в которое мы будем класть итоговые данные. Указать, будем ли мы суммировать только по проведенным документам или по всем:
Выбрать документы, по которым мы будем проводить суммирование (для каждого документа указывается поле связи со счетом и поле, по которому будет происходить агрегация):
Запустить синхронизацию:
Вуаля, достаточно сложная задача решается в несколько кликов мыши без необходимости вносить изменения в конфигурацию 1С, пакеты bpm'online, создавать дополнительные разделы и тем более писать код.
FAQ
Также на вебинаре по 1C Connector было рассмотрено много интересных вопросов, в том числе:
Вопросы по 1С и версиям:
Проблем не возникнет, потому что мы работаем через веб-сервисы
Проблем нет, потому что мы не работаем с БД напрямую, только через веб-сервисы
Нет, работаем с любыми доработанными конфигурациями
Никак, мы работаем через веб-сервисы, поэтому этого не нужно делать
Для этого нет необходимости, мы работем с любыми доработанными версиями 1С
Есть список интеграций, в каждом из них список разделов
Сборки нужно заказывать отдельно, платить естественно 1 раз
Предоставление новое сборки бесплатно, если нужны наши работы на сервере, то оплачиваются по стандартной ставке часа.
Если 1С на сервере клиента, а bpm on demand, не возникнет ли проблем?
С 1С на базе SQL/PostgreeSQL нет проблем при обмене данными?
Работа только с базовой версией 1С?
Как указывается путь к файловой базе 1с?
Версия для Казахстана есть?
Какие данные передаются в 1С и обратно где нить список посмотреть можно?
Если система уже в продакшине, будет ли работать коннектор под разными сборками для версий 7.2 и 7.3 (т.е. для каждой сборки заказывать отдельно)?
Если у клиента обновили сборку, устраняя что-то, коннектор также необходимо обновить - это к вам, в рамках купленного пакета часов поддержки?
Вопросы по продукту:
Сейчас можно сделать вручную, выбором полей будет доступно в версии 1.6 (октябрь 2014)
Есть, но эта функция не вынесена в интерфейс для пользователя
Нет, но если большой данных, то можно уменьшить его с помощью фильтров
Да, конечно! Продукт поставляется, как стандартный пакет bpm’online с открытым исходным кодом
Скажите, пожалуйста, можно настроить синхронизацию записей у которых дата изменения старше в направлении 1С-БПМ и БПМ-1С?
Есть возможность экспорта настроек для переноса с системы на систему?
Процесс синхронизации ресурсоёмкий?
Можно ли самому дорабатывать ваш продукт?
Вопросы по стоимости и прочее:
Да, 700 евро – это конечная стоимость для клиента
Для ТП мы предлагаем предоплаченные пакеты по 25, 50 и 100 часов работ по ставке 2 040 рублей/час.
Бесплатной версии не будет:)
Можем работать как полностью удаленно (есть опыт внедрения в Казахстане, Калининграде, Якутске, Иркутске, Новосибирске и т.д.), так и очно.
По продукту договор такой же, как на любые лицензии bpm’online. По блиц-проекту любые варианты
На блиц-проект не составляем, делаем только соотношение полей
Нет
Внедрение 700 евро - это конечная стоимость для клиента?
Техподдержка? Сколько стоят пакеты ТП?
Будет ли бесплатная версия? С какими ни будь ограничениями например по количеству операций( 10 продаж или т.п)
Внедрение по Казахстану как делаете? Удаленно?
Договор с конечным клиентом заключаете напрямую или через партнера?
ТЗ составляете и подписываете с клиентом?
Для партнера есть nfr (для личного пользования партнера)?
Небольшое уточнение по вопросу 5 раздела "Вопросы по стоимости и прочее".
Приобретайте коннектор там где вам удобно приобретать лицензии bpm'online:
у Terrasoft,
у партнера, с которым вы работаете,
у нас.
Как уже отметил Александр, договор на передачу неисключительных прав совершенно стандартный.
Блиц-проект заказываете непосредственно у нас либо просто ваш партнер, который делает вам внедрение или доработки, вставит наши часы в свою спецификацию, как вам удобно.
Помогите разрешить кое какую проблему с выгрузкой 1с. Как известно, в террасофте есть возможность выгрузки контрагентов в 1с. В базе данных имеются соответственно поля ...Объект1с УИД1с и конечно же Код1С. Так вот, все это работает.НО! для одной базы 1с. Есть необходимость выгружать одного контрагента в две базы данных. То есть Либу туда либо сюда, а может даже в обе. Как можно решить данную проблему? Ведь в полях Контрагентов(tbl_Account) есть место только для одной базы... Ну допустим я хочу выгрузитьь и туда и сюда..В поле UID1C соответственно запишется ID объекта 1с либо с той либо с иной базы данных. Как быть помогите пожалуйста! Начальство требует!
Я вижу пока только 2 варианта:
1) Создать поля Code1C, Object1C, UID1C для второй базы, т.е. Code1CBase2 и т.д. и перенастроить интеграцию с одной из баз на них.
2) Забыть про все эти поля и действовать через универсальное поле, такое как ИНН.
Да, именно по первому варианту и хотел сделать.Добавил поля. Даже сделал выгрузку. Теперь , могу присвоить код. Но никак не могу понять где и как он заполняет поля UID1C и Object1C. Поискал в Администраторе. Нашел только огромную тучу стандартных скриптов, и то прототипы.. А где и как присваивается - непонятно.
А разве не просто в интеграции на настройке полей? По моему там же где и настраиваются все другие поля, просто они по умолчанию сразу проставляются на Code1C и Object1C, надо их просто на свои поменять.
Или я что-то не догоняю?
А еще я знаю не всю структуру и где менять.Сейчас наткнулся на таблицу AccountBillingInfo там тоже есть Коды 1с И УИДы1С.. И там дублировать получается.. Че то как то все через..
В 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:
Александ конечно предложил интересный и правильный метод решения. В своем сообщение я только дополню и приведу пример Функции 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.Организация.Ссылка.Метаданные().ПолноеИмя();
...
}
Кто-нибудь делал интеграцию с 1С 8.3 Возможно ли это? Есть готовая инструкция? Или может в новой версии Terrasoft XRM (для Firebird) появилась такая возможность?
Здравствуйте!
Официально пока нет поддержки интеграции с 1С 8.3, но Вы можете попробовать использовать утилиту интеграции , добавив свою версию в перечисление "enm_1CVersion".
Добрый день, хочу поделиться с вами скриптом, который помогает при разработке. В данном скрипте, написаны часто используемые и полезные функции по работе с
Данными
Окнами
Бизнес процессы
1С
И другие
Работа с данными
При работе с данными основными операциями являются - получить данные и записать.
Что бы каждый раз не писать для этого код, встречайте: GetDatasetValue - для получения одного значения GetDatasetValues - для получения множества значений SetDatasetValue - для записи одного значения SetDatasetValues - для записи множеств значений
Пример: необходимо получить имя контакта по его ID.
Для этого нужно написать вот такую функцию и вызвать ее.
function GetContactName(ContactID){ var Dataset = Services.GetNewItemByUSI('ds_Contact');
ApplyDatasetFilter(Dataset,'ID', ContactID,true);
Dataset.Open(); varName= Dataset('Name');
Dataset.Close(); returnName; }
function Main(){ var SupervisorID ='{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}'; varName= GetContactName(SupervisorID); }
Но можно избежать написания функции GetContactName, используя GetDatasetValue,
тогда весь код для получения имени контакта станет вот таким
function Main(){ var SupervisorID ='{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}'; varName= GetDatasetValue('ds_Contact', SupervisorID,'Name'); }
В GetDatasetValue написан уже код для получения значения.
Таким образом, мы сэкономили время на разработку и избавились от монотонной работы.
Для изменения контакту имени, мы будем использовать SetDatasetValue
Здесь и фильтрация по ID записи и запись значения, все в одной строке.
Работа с окнами
При работе с окнами, часто возникает необходимость подключать детали в карточку редактирования.
Для этого, разработана функция которая это делает очень легко - IncludeDetailEdit
Для примера подключим деталь договоров в карточку продажи.
Все это опишем в одном методе IncludeDetails.
function IncludeDetails(){ var Dataset = dlData.Dataset; var RecordID = Dataset('ID');
IncludeDetailEdit(wndContract,'ds_Contract','OpportunityID', RecordID); }
Нужно указать контейнер окна (WindowContainer) содержащий реестр договоров, датасет, поле для фильтрации договоров и ID записи по которой будем фильтровать.
Бизнес процессы
Работа каждого бизнес процесса начинается с его запуска, для этого будем использовать RunWorkflow
Запуск процесса с передачей в диаграмму контакта и контрагента.
Если вам ничего не потребуется передавать, тогда заполнять второй параметр не обязательно.
function StartProcess(){ var Dataset = dlData.Dataset; var ContactID = Dataset('ContactID'); var AccountID = Dataset('AccountID');
Нужно указать USI диаграммы и набор передаваемых параметров в диаграмму.
Параметры должны быть у виде объекта, где имя свойства будет равным имени параметра.
Это только маленькое описание по часто используемым функциям.
Спасибо. Интересно было посмотреть на отправку почты через Thunderbird, работу с OpenOffice и отправка HTTP запросов и получение ответов (взял для себя на заметку).
Там был создан черновик давным давно и он у меня не отображался в первых строках после публикации. Поэтому я подумал, что он затерялся в старых дата и пересоздал тему.
Библиотека полезная.
Не очень ясно только, зачем нужны GetDatasetValue и GetDatasetValues при наличии аналогичных GetDatasetFieldValueByID и GetDatasetFieldValuesByID.
Нужно каким-то образом получать из 1С список изменных объектов, чтобы запускать их импорт в Террасофт. Проверка будет выполнятся со стороны Террасофт. Причем получать эти данные нужно не ночью раз в сутки, а, например, каждые 10 минут.
Кто-то использовал планы обмена, которые есть в 1С 8?
Цытата из одной статьи, которая меня настораживает:
Планы обмена и производительность 1С
Из-за системных особенностей реализации планов обмена, не рекомендуется злоупотреблять выгрузкой изменений по планам обмена. Дело в том, что при чтении изменений блокируются все таблицы изменений. Т.е при выгрузке, план обмена не дает записать новые изменений – а следовательно блокирует и сами элементы - справочники, документы и т.д.
Выгрузку рекомендуется производить в нерабочее время или совсем маленькими партиями данных – что бы блокировки были на максимально короткий срок.
То есть не будет ли частое обращение к планам обмена блокировать работу пользователей в 1С?
Мне ведь, на самом деле, нужна только информация какую запись импортировать, а не сама запись.
Добрый день! Прошу совета по настройке интеграции контрагентов с 1С 8.
Контрагенты выгружаются в 1С только при создании счета (чтобы не засорять базу бухгалтерии).
Есть ситуация: в ТС создали контрагента (пока счета нет). В 1С создали того же контрагента.
Если использовать в качестве ключевого поля "Уникальный идентификатор 1С", то при выгрузке контрагента из ТС в 1С произойдет задвоение.
Если использовать набор ИНН+КПП, то это поле может изменится в дальнейшем (например, если клиент дал неправильные данные и потом прислал верные) и опять произойдет задвоение.
Есть вариант при первичной интеграции осуществлять поиск по ИНН+КПП (пока в ТС нет данных об UID1C). А после уже по UID1C, т.к. оно неизменно. Но не знаю есть ли возможность реализовать такой вариант.
Подскажите, пожалуйста, как можно поступить? Как вы реализовываете двустороннюю интеграцию контрагентов?
Дмитрий, а если проверять по ИНН + КПП, в случае если контрагент с таким UID1C не найден?
Ведь время между созданием одного и того же контрагента в 1С и в Террасофте не должно превышать 1-2 дней, верно? Т.е. за это время, в 1С, по идее, не должны сменить ему ИНН+КПП. А уже после этого даже если сменят - уже будет проверка по UID1C.
Да, такой вариант я думаю возможен. А можно ли это реализовать используя утилиту интеграции из каталога расширений? Чтобы сначала проверял по ИНН+КПП, а в следующий раз по UID?
Я думаю необходимо как раз наоборот, сначала проверить по UID, и если соответствия не найдено (т.е. поле UID в Террасофте null) то проверять по ИНН+КПП.
По идее, можно попробовать в настройках интеграции выставить для этих трех полей соответсвующий признак - должно работать.
Но я бы порекомендовал создать скрипт интеграции, и написать код на OnBeforeRecordExport. Что-то вроде:
if(Dataset('UID1C')== null){
var INN = Dataset('INN');
var KPP = Dataset('KPP');
var Account1C = Param.Obj1C.Справочники.Контрагенты;if(Account1C.НайтиПоАтрибуту('ИНН', INN)==1&& Account1C.НайтиПоАтрибуту('КПП', KPP)==1){//return false; чтобы отменить экпорт//либо//Account1C.SetAttrib('Наименование') = Dataset('Name');//и т.д.//Account1C.Записать();}}
Экспорт из ТС в 1С сделал, все нормально. Теперь думаю как реализовать импорт из 1С.
Такая же ситуация, нужно проверить по ИНН+КПП, если нет связи по UID.
Получается нужно также руками создавать контрагента и на OnBeforeRecordImport возвращать true?
Но тогда не сработают подчиненные интеграции?
У меня есть настроенная подчиненная интеграция адресов контрагента (Импорт из 1С).
Можно ли запустить подчиненную интеграцию из скрипта передав туда ID контрагента?