Добрый день, Уважаемые коллеги!

Продолжаем рассказывать о продукте 1C Connector. Сегодня мы остановимся на одном из наиболее часто используемых сценариев интеграции, который доступен пользователям нашего продукта.

Рассмотрим следующий кейс: менеджер создает счет в системе bpm’online и ему нужно, чтобы он сразу ушел в 1С, а после получения оплаты по этому счету необходимо сразу отобразить это в bpm’online.

Менеджер создает счет в системе bpm’online:

Счет в bpm

Далее пользователь может подождать экспорта счета в 1С в течение определенного времени, заданного в расписании настроенной интеграции:

Расписание интеграции

Или же может запустить интеграцию вручную:

Запуск вручную

После этого счет появится в системе 1С. Вместе со счетом будут переданы все связанные сущности, такие как Продукты, Договоры, Контрагенты и т.д., которые вы прописали в настройках синхронизации:

Счет в 1С

Для интеграции оплаты в bpm’online необходимо провести счет в 1С:

Проводка счета

Вся внесенная информация появится уже на стороне bpm’online:

Оплаченный счет

Таким образом, менеджер сразу может увидеть информацию о состоянии и времени оплаты счета.

В скором времени мы расскажем, как можно при помощи нашего коннектора вызывать интеграцию из БП, какие фильтры можно настроить для интегрируемых сущностей и поговорим о множестве иных интересных функций, которые заложены в продукте 1C Connector. Подписывайтесь на обновление материала!

С удовольствием отвечу на все возникающие вопросы!

Нравится

Поделиться

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

как записать значение перечисления для заполнения поля 1С?
поле

Нравится

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

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

Проблема все еще актуальна

Какая версия 1с?

Тогда рекомендую поставить утилиту для 8.2:
http://www.community.terrasoft.ru/catalog/3796
А затем используйте совет описанный тут:
http://www.community.terrasoft.ru/forum/topic/12260#comment-52599

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

И снова здравствуйте!

Третий день мучаюсь с экспортом контрагентов в 1C. Сам контрагент, включая название передаётся легко, но загвоздка в его деталях - адресах, ИНН и КПП.

Адреса берутся из набора данных ТС "Адреса контрагента", а ИНН и КПП - из "Платежные реквизиты" но экспортируются в самого контрагента. То есть, это, вроде, подчинённые детали, а вроде и нет.

Сейчас детали настроены как подчинённые, чтобы была связь с самим контрагентом. Скорее всего, нужно правильное ключевое поле, которое я не могу подобрать. Всякие ID не будут совпадать, т.к. разные объекты в Террасофт, а других зацепок, по сути, нет.

Кто-нибудь решал эту проблему?

Нравится

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

С ИНН и КПП разобрался программно, а также с произвольной строкой адреса. Теперь осталось только передавать детали адреса - Страну, Город, Улицу и т.д.

Лично у меня экспорт контрагентов всё одной настройкой...
Вот кусок с адресами. Событие OnAfterRecordExport:

//удалить  все адреса и средства связи	
	var ci1C = Param.Obj1C.РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); 
	ci1C.Отбор.Объект.Установить(Select1C.Ссылка);
	//[не регистрируем изменения на стороне 1с	
	ci1C.ОбменДанными.Получатели.АвтоЗаполнение = false;
	//]
	ci1C.Записать(); 	
	//Адреса
	var AccountID = Dataset('ID');	
	var ds = Services.GetNewItemByUSI('ds_AccountAddress');
	ApplyDatasetFilter(ds, 'AccountID', AccountID, true);
	ds.Open();
	while(!ds.IsEOF) {
		var ci1CMain = Param.Obj1C.РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
		var ci1C = ci1CMain.Добавить();
		ci1C.Объект = Select1C.Ссылка;
		var met=Param.Obj1C.Метаданные.Перечисления.Найти("ТипыКонтактнойИнформации");
		var meta=met.ЗначенияПеречисления.Найти('Адрес');
		var metalink = Param.Obj1C.Перечисления.ТипыКонтактнойИнформации[meta.Имя];
		ci1C.Тип = metalink;
		var AdrTypeID = ds('KLADRAddressTypeID');
		var AdrTypeUID1C = GetDatasetFieldValueByID('ds_AddressType',
			AdrTypeID, 'UID1C');
		var AddressType1CLink;
		if(!IsEmptyValue(AdrTypeUID1C)) {
			AddressType1CLink = GetObjectLinkByUID(
					Param.Obj1C.Справочники.ВидыКонтактнойИнформации, AdrTypeUID1C, Param);	
			ci1C.Вид = !AddressType1CLink.Пустая() ? AddressType1CLink : null;
			ci1C.Представление = ds('KLADRAddress');
			ci1C.Поле1 = ds('KLADRAddressZIP');
			ci1C.Поле2 = ds('KLADRAddressSubject');
			ci1C.Поле3 = ds('KLADRAddressRegion');
			ci1C.Поле4 = ds('KLADRAddressDistrictCenter');
			ci1C.Поле5 = ds('KLADRAddressCity');
			ci1C.Поле6 = ds('KLADRAddressStreet');
			ci1C.Поле7 = ds('KLADRAddressHouse');
			ci1C.Поле8 = ds('KLADRAddressCase');
			ci1C.Поле9 = ds('KLADRAddressFlat');
			//[не регистрируем изменения на стороне 1с	
			ci1CMain.ОбменДанными.Получатели.АвтоЗаполнение = false;
			//]						
			ci1CMain.Записать(false); 
		}		
		ds.GotoNext();
	}
	ds.Close();

По поводу заполнения справочных реквизитов...
Получаете 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);
function CreateGUID1C(UID1C, Obj1C) {
	if(UID1C == null) {
		return '';
	}
	UID1C = UID1C.replace('{', '');
	UID1C = UID1C.replace('}', '');
	UID1C = Obj1C.NewObject('УникальныйИдентификатор', UID1C);
	return UID1C;
}

> Лично у меня экспорт контрагентов всё одной настройкой...

Да, этот ваш код мне сильно помог, хоть он и не подходит для 1С 8.3, так как "РегистрыСведений.КонтактнаяИнформация" больше не существует, они переехали в справочники.

> Получаете ID страны из детали адреса, далее по этому ID получаете значение в поле UID1C, и далее получаете ссылку на страну в 1с, и кладете её в реквизит...

Интересно. Меня смутило, что механизм интеграции определил эти поля как простые Строки, но попробовать надо.

ОК. Если что будет конкретного: кидайте ваш код или скрины.

Попробовал, не то чтобы получилось. Работает всё так:

Берём объект:

var Contragent = Select1C.Ссылка.ПолучитьОбъект();

Получаем его ID, идём по списку адресов, добавляя каждый:

var AccountID = Dataset('ID');
 
var ds = Services.GetNewItemByUSI('ds_AccountAddress');
ApplyDatasetFilter(ds, 'AccountID', AccountID, true);
ds.Open();
 
while(!ds.IsEOF) {
      AddAddress(Param, Contragent, ds);
      ds.GotoNext();
}
ds.Close();

Функция AddAddress:

	var newAddress= Contragent.КонтактнаяИнформация.Добавить() ;
	newAddress.Тип = Param.Obj1C.Перечисления.ТипыКонтактнойИнформации.Адрес;
 
	switch(Dataset('AddressTypeID'))
	{
		//Добавляем вид адреса
	}
 
       //Из комментария выше
	var Contragent1C = Param.Obj1C.Справочники.СтраныМира;
	var CountryUID1C = GetDatasetFieldValueByID('ds_Country', Dataset('CountryID'), 'UID1C');
	CountryUID1C = CreateGUID1C(CountryUID1C, Param.Obj1C);
	newAddress.Страна = Contragent1C.GetRef(CountryUID1C); 
 
	Contragent.Записать(false);

При этом поле Страна отображается верно. Однако, при обзоре в клиенте 1С, поле не заполнено.

Как-то так пока.

После записи выполните запрос в 1с и посмотрите что в этом поле. Если ничего - значит не записалось. Возможно срабатывают какие то проверки "перед записью" на стороне 1с?

Имеется ввиду запрос к БД 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"???

Нравится

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

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

К сожалению - это регистр сведений и в нем нет никакого 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. Схематично это выглядит так:

С точки зрения настройки достаточно выполнить следующие шаги:

  1. В интеграции счета добавить агрегирующую колонку:
  2. Выбрать поле счета в bpm'online, в которое мы будем класть итоговые данные. Указать, будем ли мы суммировать только по проведенным документам или по всем:
  3. Выбрать документы, по которым мы будем проводить суммирование (для каждого документа указывается поле связи со счетом и поле, по которому будет происходить агрегация):
  4. Запустить синхронизацию:

Вуаля, достаточно сложная задача решается в несколько кликов мыши без необходимости вносить изменения в конфигурацию 1С, пакеты bpm'online, создавать дополнительные разделы и тем более писать код.

FAQ

Также на вебинаре по 1C Connector было рассмотрено много интересных вопросов, в том числе:
Вопросы по 1С и версиям:

Проблем не возникнет, потому что мы работаем через веб-сервисы

Проблем нет, потому что мы не работаем с БД напрямую, только через веб-сервисы

Нет, работаем с любыми доработанными конфигурациями

Никак, мы работаем через веб-сервисы, поэтому этого не нужно делать

Для этого нет необходимости, мы работем с любыми доработанными версиями 1С

Есть список интеграций, в каждом из них список разделов

Сборки нужно заказывать отдельно, платить естественно 1 раз

Предоставление новое сборки бесплатно, если нужны наши работы на сервере, то оплачиваются по стандартной ставке часа.

  1. Если 1С на сервере клиента, а bpm on demand, не возникнет ли проблем?
  2. С 1С на базе SQL/PostgreeSQL нет проблем при обмене данными?
  3. Работа только с базовой версией 1С?
  4. Как указывается путь к файловой базе 1с?
  5. Версия для Казахстана есть?
  6. Какие данные передаются в 1С и обратно где нить список посмотреть можно?
  7. Если система уже в продакшине, будет ли работать коннектор под разными сборками для версий 7.2 и 7.3 (т.е. для каждой сборки заказывать отдельно)?
  8. Если у клиента обновили сборку, устраняя что-то, коннектор также необходимо обновить - это к вам, в рамках купленного пакета часов поддержки?

Вопросы по продукту:

Сейчас можно сделать вручную, выбором полей будет доступно в версии 1.6 (октябрь 2014)

Есть, но эта функция не вынесена в интерфейс для пользователя

Нет, но если большой данных, то можно уменьшить его с помощью фильтров

Да, конечно! Продукт поставляется, как стандартный пакет bpm’online с открытым исходным кодом

  1. Скажите, пожалуйста, можно настроить синхронизацию записей у которых дата изменения старше в направлении 1С-БПМ и БПМ-1С?
  2. Есть возможность экспорта настроек для переноса с системы на систему?
  3. Процесс синхронизации ресурсоёмкий?
  4. Можно ли самому дорабатывать ваш продукт?

Вопросы по стоимости и прочее:

Да, 700 евро – это конечная стоимость для клиента

Для ТП мы предлагаем предоплаченные пакеты по 25, 50 и 100 часов работ по ставке 2 040 рублей/час.

Бесплатной версии не будет:)

Можем работать как полностью удаленно (есть опыт внедрения в Казахстане, Калининграде, Якутске, Иркутске, Новосибирске и т.д.), так и очно.

По продукту договор такой же, как на любые лицензии bpm’online. По блиц-проекту любые варианты

На блиц-проект не составляем, делаем только соотношение полей

Нет

  1. Внедрение 700 евро - это конечная стоимость для клиента?
  2. Техподдержка? Сколько стоят пакеты ТП?
  3. Будет ли бесплатная версия? С какими ни будь ограничениями например по количеству операций( 10 продаж или т.п)
  4. Внедрение по Казахстану как делаете? Удаленно?
  5. Договор с конечным клиентом заключаете напрямую или через партнера?
  6. ТЗ составляете и подписываете с клиентом?
  7. Для партнера есть nfr (для личного пользования партнера)?

Презентация доступна онлайн, а также во вложении

Нравится

Поделиться

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

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

Небольшое уточнение по вопросу 5 раздела "Вопросы по стоимости и прочее".

Приобретайте коннектор там где вам удобно приобретать лицензии bpm'online:
у Terrasoft,
у партнера, с которым вы работаете,
у нас.

Как уже отметил Александр, договор на передачу неисключительных прав совершенно стандартный.

Блиц-проект заказываете непосредственно у нас либо просто ваш партнер, который делает вам внедрение или доработки, вставит наши часы в свою спецификацию, как вам удобно.

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

Помогите разрешить кое какую проблему с выгрузкой 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.Организация.Ссылка.Метаданные().ПолноеИмя();					
...
}
Показать все комментарии

Кто-нибудь делал интеграцию с 1С 8.3
Возможно ли это? Есть готовая инструкция? Или может в новой версии Terrasoft XRM (для Firebird) появилась такая возможность?

Нравится

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

Здравствуйте!
Официально пока нет поддержки интеграции с 1С 8.3, но Вы можете попробовать использовать утилиту интеграции , добавив свою версию в перечисление "enm_1CVersion".

А встроенной, проверенной и гарантированной авторами программы Terrasoft XRM интеграции не будет? Хотя бы в следующих версиях?

linuxmasterz, интеграция обязательно будет, но пока не могу сориентировать по срокам.

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

Добрый день, хочу поделиться с вами скриптом, который помогает при разработке.
В данном скрипте, написаны часто используемые и полезные функции по работе с

  • Данными
  • Окнами
  • Бизнес процессы
  • И другие

Работа с данными
При работе с данными основными операциями являются - получить данные и записать.
Что бы каждый раз не писать для этого код, встречайте:
GetDatasetValue - для получения одного значения
GetDatasetValues - для получения множества значений
SetDatasetValue - для записи одного значения
SetDatasetValues - для записи множеств значений

Пример: необходимо получить имя контакта по его ID.
Для этого нужно написать вот такую функцию и вызвать ее.

function GetContactName(ContactID) {
        var Dataset = Services.GetNewItemByUSI('ds_Contact');
        ApplyDatasetFilter(Dataset, 'ID', ContactID, true);
        Dataset.Open();
        var Name = Dataset('Name');
        Dataset.Close();
        return Name;
}

function Main() {
        var SupervisorID = '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}';
        var Name = GetContactName(SupervisorID);
}

Но можно избежать написания функции GetContactName, используя GetDatasetValue,
тогда весь код для получения имени контакта станет вот таким

function Main() {
        var SupervisorID = '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}';
        var Name = GetDatasetValue('ds_Contact', SupervisorID, 'Name');
}

В GetDatasetValue написан уже код для получения значения.
Таким образом, мы сэкономили время на разработку и избавились от монотонной работы.

Для изменения контакту имени, мы будем использовать SetDatasetValue

SetDatasetValue('ds_Contact', ContactID, 'Name', NewName);

Здесь и фильтрация по 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');
       
        RunWorkflow('wd_Sales', {
                'ContactID' : ContactID,
                'AccountID' : AccountID
        });
}

Нужно указать USI диаграммы и набор передаваемых параметров в диаграмму.
Параметры должны быть у виде объекта, где имя свойства будет равным имени параметра.

Это только маленькое описание по часто используемым функциям.

Нравится

Поделиться

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

а вообще, спасибо большое :twisted:

хотя и есть спорные моменты

Спасибо. Интересно было посмотреть на отправку почты через Thunderbird, работу с OpenOffice и отправка HTTP запросов и получение ответов (взял для себя на заметку).

"Андросов Дмитрий" написал:


Упс, точно. Исправлю.

"Зверев Александр" написал:

А в чём разница с предыдущим сообщением?


Там был создан черновик давным давно и он у меня не отображался в первых строках после публикации. Поэтому я подумал, что он затерялся в старых дата и пересоздал тему.

Тогда ясно.

Библиотека полезная.
Не очень ясно только, зачем нужны GetDatasetValue и GetDatasetValues при наличии аналогичных GetDatasetFieldValueByID и GetDatasetFieldValuesByID.

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

Нужно каким-то образом получать из 1С список изменных объектов, чтобы запускать их импорт в Террасофт. Проверка будет выполнятся со стороны Террасофт. Причем получать эти данные нужно не ночью раз в сутки, а, например, каждые 10 минут.

Кто-то использовал планы обмена, которые есть в 1С 8?

Цытата из одной статьи, которая меня настораживает:

Планы обмена и производительность 1С

Из-за системных особенностей реализации планов обмена, не рекомендуется  злоупотреблять выгрузкой изменений по планам обмена. Дело в том, что при чтении изменений блокируются все таблицы изменений. Т.е при выгрузке, план обмена не дает записать новые изменений – а следовательно блокирует и сами элементы - справочники, документы и т.д.

Выгрузку рекомендуется производить в нерабочее время или совсем маленькими партиями данных – что бы блокировки были на максимально короткий срок.

То есть не будет ли частое обращение к планам обмена блокировать работу пользователей в 1С?
Мне ведь, на самом деле, нужна только информация какую запись импортировать, а не сама запись.

По поводу планов обмена 1С узнал из документов по утилите интеграции с 1С.
Мой вопрос по этому поводу там - ссылка.

Нравится

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

Добрый день!
Прошу совета по настройке интеграции контрагентов с 1С 8.
Контрагенты выгружаются в 1С только при создании счета (чтобы не засорять базу бухгалтерии).
Есть ситуация: в ТС создали контрагента (пока счета нет). В 1С создали того же контрагента.

Если использовать в качестве ключевого поля "Уникальный идентификатор 1С", то при выгрузке контрагента из ТС в 1С произойдет задвоение.

Если использовать набор ИНН+КПП, то это поле может изменится в дальнейшем (например, если клиент дал неправильные данные и потом прислал верные) и опять произойдет задвоение.

Есть вариант при первичной интеграции осуществлять поиск по ИНН+КПП (пока в ТС нет данных об UID1C). А после уже по UID1C, т.к. оно неизменно. Но не знаю есть ли возможность реализовать такой вариант.

Подскажите, пожалуйста, как можно поступить? Как вы реализовываете двустороннюю интеграцию контрагентов?

Нравится

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

Дмитрий, а если проверять по ИНН + КПП, в случае если контрагент с таким 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 контрагента?

Получилось сделать, используя функцию ImportDetails

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