PT 1C Connector
интеграция
Программные Технологии
ПТ
Центр разработки и внедрения Terrasoft-Поволжье
ЦРВ Террасофт Поволжье

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

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

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

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

Счет в bpm

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

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

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

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

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

Счет в 1С

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

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

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

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

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

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

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

Нравится

Поделиться

0 комментариев
Показать все комментарии
экспорт в 1С
Интеграция и импорт данных
Разработка

как записать значение перечисления для заполнения поля 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,
у партнера, с которым вы работаете,
у нас.

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

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

Показать все комментарии
2
Terrasoft
базы
выгрузка
Выгрузка в две базы 1С
данных
две
одна
Скрипты
Разработка

Помогите разрешить кое какую проблему с выгрузкой 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, интеграция обязательно будет, но пока не могу сориентировать по срокам.

Показать все комментарии
OpenOffice
thunderbird
Бизнес Технологии
скрипт
Скрипты

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

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

Работа с данными
При работе с данными основными операциями являются - получить данные и записать.
Что бы каждый раз не писать для этого код, встречайте:
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

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