Добрый день.

Подскажите где локально у пользователей лежит файлик в котором Terrasoft для толстого клиента 3.3. помнит логин пользователя, который подставляется под базу из списка выбора (где лежат настройки на базу нашел, а вот куда кэшируеться логин?).

Нравится

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

Тут:

HKEY_CURRENT_USER\Software\Terrasoft\TS\TfrmLogin

Здравствуйте.
Логин, под которым выбирается база данных из выпадающего списка при настройке конфигурации не сохраняется. Что касается имени входа в систему, то последнее хранится в системном реестре Windows. Путь может выглядеть так "HKEY_CURRENT_USER\Software\Terrasoft\TS\Tfrmlogin\Configuration..."

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

Добрый день!
Возникла такая ситуация. При входящем звонке со срытого номера, зависает карточка в большинстве случаев. Номер определяется как 007.
Из за чего может зависать звонок? И быть может есть способ подменить номер вместо этого номера?
Может кто сталкивался?

Нравится

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

Причину зависания звонка можно определить в процессе отладки на Вашей конфигурации.
Илья, в этом случае Вам необходимо обратится письменно в техническую поддержку Terrasoft, сообщив дополнительную информацию:
- Версию Terrasoft
- Продукт Terrasoft
- Интеграцию с какой телефонией используете и по каким протоколам
- Ваши контактные данные
- Параметры подключения к Вашей конфигурации

Скорей всего что номер 007 подставляет Ваша АТС и необходимо вносить изменения в настройки АТС чтобы она передавала тот или иной CallerID (входящий номер).

Спасибо, буду пытаться разобраться.

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

Здравствуйте!
Террасофт 3.5.1, 1С 8.3.
Есть настроенная интеграция: экспорт контрагентов из ТС в 1С. Все нужные поля экспортируются.
Понадобилось добавить экспорт e-mail'ов контрагентов. В ТС и 1С эти поля есть. Но в 1С это поле на форме. А в реквизитах в 1С нет этого значения (EmailКонтрагента).
Добавил в реквизиты Контрагентов в 1С реквизит EmailКонтрагента. В ТС выполнил Загрузка метаданных 1С. Но в ТС для Контрагентов не появился этот реквизит. См. скриншоты.

Как добавить реквизит EmailКонтрагента в ТС?

Нравится

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

Добрый день.
Сохраняли, компилировали конфигурацию 1с? Дайте скриншот реквизитов из 1с Конфигуратора, скриншот поля с формы не подходит, т.к. как вы верно заметили, далеко не факт, что он ссылается на реквизит объекта :)

Спасибо, Дмитрий. Да, я не скомпилировал конфигурацию.
Сейчас скомпилировал, поле EmailКонтрагента появилось в ТС.
Выполняю в OnBeforeRecordExport стандартную функцию:

Select1C.EmailКонтрагента =  'test@test2015.ru';  

Но, в 1С в поле email ничего не пишется. Такое ощущение, что созданный мною реквизит в 1С не привязан к поле email на форме Контрагента.
Как его можно привязать?

А покажите свойства поля, там возможно где-то указывается реквизит, к которому оно привязано?

Но, если в 1С выполнить Запрос выбора данного контрагента, то там в поле EmailКонтрагента есть 'test@test2015.ru'.(см. скриншот) Значит скрипт отработал и записал. Только непонятно, почему на форме не отображается этот email. Или это поле на форме привязано к другому полю?
Вот картинка: синим это email на форме. Справа его свойства. При открытии ПутькДанным открывается окно Выбор Реквизита...

Записал в 1С вручную в этом поле email 123@aaa.ru. Выполнил запрос в 1С и увидел данный email в другом поле, но в таком виде:

Теперь как из ТС в 1С это экспортировать...

Что-то мне напоминает это поведение эту тему:

http://www.community.terrasoft.ru/forum/topic/11984#comment-51983

пс: я, к сожалению, с таким не сталкивался.

Дмитрий, посмотрел тему. У меня в 1с по запросу выдает email в КонтактнаяИнформация (если email забить в ручную в 1С): (скриншот)

email находится в полях: Представление, АдресЭП и в поле ЗначенияПолей (xml формат).
Т.к. мы в 1С в ручную заносим email в одно поле, то потом, видимо скрипт 1С разносит email по другим полям.
Можно ли попробовать записать программно email хотя бы в поле Представление или АдресЭП?

Добрый день.
Конечно можно. Но, по-моему это регистр сведений. Нужно делать подчиненную настройку.
Там еще проблемы с маппингом будут, поэтому лучше всего - перед импортом и экспортом очищать контактную информацию как в тс так и в 1с (это если у вас двусторонняя интеграция).

Дмитрий, у меня только Экспорт в 1С.
"Нужно делать подчиненную настройку."
Можете показать пример как программно (в OnBeforeRecordExport ) это сделать?

Вот примерчик с одного из проектов, может поможет.

Экспорт:

function OnAfterRecordExport(Param, Dataset, Select1C) {
	//удалить  все адреса и средства связи	
	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;
			//]	
			try {				
			ci1CMain.Записать(false); } catch(e) {}
		}		
		ds.GotoNext();
	}
	ds.Close();					
	//Средства связи	
	var ds = Services.GetNewItemByUSI('ds_AccountCommunication');
	ApplyDatasetFilter(ds, 'AccountID', AccountID, true);
	ds.Open();
 
	//[найти одинаковые типы средств связи
	while(!ds.IsEOF) {
		var CommTypeID = ds('CommunicationTypeID');
		var indx = Contains(ObjExport.CommTypeArray, CommTypeID);
		if(indx == false && typeof indx == 'boolean') {
			ObjExport.CommTypeArray.push([ds('CommunicationTypeID'), ds('Number')]);
		} else {
			ObjExport.CommTypeArray[indx] = [CommTypeID, (ObjExport.CommTypeArray[indx][1] +';'+ ds('Number'))]; 
		}
		ds.GotoNext();
	} 	
	//] 
	var phone = '';	
	for (var i = 0; i < ObjExport.CommTypeArray.length; i++) {
		var ci1CMain = Param.Obj1C.РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
		var ci1C = ci1CMain.Добавить();
		ci1C.Объект = Select1C.Ссылка;
		var CommunicationTypeID = ObjExport.CommTypeArray[i][0];		
		var Values = GetDatasetFieldValuesByIDEx('ds_CommunicationType', 
			CommunicationTypeID, ['UID1C', 'IsPhone']);
		if(IsEmptyValue(Values)) {
			continue;
		}
		if(Values('IsPhone')) {
			var ci1C2Main = Param.Obj1C.РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
			var ci1C2 = ci1C2Main.Добавить();
			ci1C2.Объект = Select1C.Ссылка;		
			var met=Param.Obj1C.Метаданные.Перечисления.Найти("ТипыКонтактнойИнформации");
			var meta=met.ЗначенияПеречисления.Найти('Телефон');
			var metalink = Param.Obj1C.Перечисления.ТипыКонтактнойИнформации[meta.Имя];
			ci1C2.Тип = metalink;
			var CommunicationTypeUID1C = Values('UID1C');
			var CommunicationType1CLink;
			if(!IsEmptyValue(CommunicationTypeUID1C)) {
				CommunicationType1CLink = GetObjectLinkByUID(
					Param.Obj1C.Справочники.ВидыКонтактнойИнформации, 
					CommunicationTypeUID1C, Param);	
				ci1C2.Вид = !CommunicationType1CLink.Пустая() ? CommunicationType1CLink : null;
		    }
			phone = ObjExport.CommTypeArray[i][1];
			ci1C2.Представление = phone;	
			ci1C2.Поле3 = phone;
			try {
				//[не регистрируем изменения на стороне 1с	
				ci1C2Main.ОбменДанными.Получатели.АвтоЗаполнение = false;
				//]				
				ci1C2Main.Записать(false);	
			} catch(e) {}			
		} else {			
			var CommunicationTypeUID1C = Values('UID1C');
			var CommunicationType1CLink;
			if(!IsEmptyValue(CommunicationTypeUID1C)) {
				CommunicationType1CLink = GetObjectLinkByUID(
						Param.Obj1C.Справочники.ВидыКонтактнойИнформации, 
						CommunicationTypeUID1C, Param);	
				ci1C.Вид = !CommunicationType1CLink.Пустая() ? CommunicationType1CLink : null;
				ci1C.Тип = CommunicationType1CLink.Тип;
				ci1C.Представление = ObjExport.CommTypeArray[i][1];
				try {
					//[не регистрируем изменения на стороне 1с	
					ci1CMain.ОбменДанными.Получатели.АвтоЗаполнение = false;
					//]					
					try {
					ci1CMain.Записать(false); } catch(e) {}
				} catch(e) {}
			}	
		} 		
		ds.GotoNext();
	}	
	ds.Close();
}

Импорт:

function OnBeforeRecordImport(Param, Dataset, Select1C) {
	//очистка
	Obj.AccountID = Dataset('AccountID');
	if(Obj.IsTrue != true) {
		var dq = Services.GetNewItemByUSI('dq_clearAccountCommunication');
		SetParameterValue(dq.Parameters, 'AccountID', Obj.AccountID, true);
		dq.Execute();
		Obj.IsTrue = true;
	}
	//
	var Type1C = Param.Obj1C.XMLString(Select1C.Тип);	
	switch (Type1C) {
		case ('Телефон'):
			if(Param.Obj1C.String(Select1C.Вид) == 'Факсы') {
				if(Obj.IsThree != true) {
					ImportAccountUU.Position = 3;
					Obj.IsThree = true;	
				} else {
					ImportAccountUU.Position = 6;	
				}
				break;	
			}
			if(Obj.IsOne != true) {
				ImportAccountUU.Position = 1;
				Obj.IsOne = true;	
			} else if(Obj.IsTwo != true) {
				ImportAccountUU.Position = 2;
				Obj.IsTwo = true;	
			} else {
				ImportAccountUU.Position = 6;	
			}			
		break;
		case ('Факсы'):
			if(Obj.IsThree != true) {
				ImportAccountUU.Position = 3;
				Obj.IsThree = true;	
			} else {
				ImportAccountUU.Position = 6;	
			}				
		break;
		case ('ВебСтраница'):
			if(Obj.IsFour != true) {
				ImportAccountUU.Position = 4;
				Obj.IsFour = true;	
			} else {
				ImportAccountUU.Position = 6;	
			}
		break;
		case ('АдресЭлектроннойПочты'):
			if(Obj.IsFive != true) {
				ImportAccountUU.Position = 5;
				Obj.IsFive = true;	
			} else {
				ImportAccountUU.Position = 6;	
			}
		break;		
		default:
			ImportAccountUU.Position = 6;
			break;
	}	
	//ImportAccountUU.Position++;
	Dataset('Position') = ImportAccountUU.Position;	
	Dataset('RF') = 1;
	var CommunicationTypeID = Dataset('CommunicationTypeID');
	var Num = Dataset('Number');
	//Digits
	Dataset('Digits') = DigitsFromString(Num);
	var AccountID = Dataset('AccountID');
	Obj.AccountID = AccountID;	
	//разбивка	
	if(Num.indexOf(';') != -1) {
		var a = false;
		var b = false;		
		while(Num.indexOf(';') != -1) {
			Numb = Num.split(';');
			var NewNumber = Numb[0];
			var DS = Services.GetNewItemByUSI('ds_AccountCommunication');
			DS.DisableEvents();
			DS.Append();
			DS('ID') = Connector.GenGUID();
			DS('AccountID') = Dataset('AccountID');
			DS('Number') = NewNumber;
			DS('Digits') = DigitsFromString(NewNumber);
			DS('RF') = 1;
			DS('CommunicationTypeID') = Dataset('CommunicationTypeID');
			if(a == false) {
				DS('Position') = Dataset('Position');			
				a = true;
			} else if (b == false){
				DS('Position') = Dataset('Position') == 1 ? 2 : 6;			
				b = true;	
			} else {
				DS('Position') = 6;			
				b = true;	
			}
			if(!IsEmptyValue(DS('Number'))) {
				DS.Post();
			}
			Num = '';
			for(var i = 1; i < Numb.length; i++){
				if(i == Numb.length - 1) {
					Num += Numb[i];
				} else {
					Num += Numb[i] + ';';	
				}
			}
			if(Num.indexOf(';') == -1)	{
				DS.Append();
				DS('ID') = Connector.GenGUID();
				DS('AccountID') = Dataset('AccountID');
				DS('Number') = Num;
				DS('CommunicationTypeID') = Dataset('CommunicationTypeID');
				DS('RF') = 1;
				if(a == false) {
					DS('Position') = Dataset('Position');			
					a = true;
				} else if (b == false){
					DS('Position') = Dataset('Position') == 1 ? 2 : 6;			
					b = true;
					Obj.IsTwo = true;	
				} else {
					DS('Position') = 6;			
					b = true;	
				}
				if(!IsEmptyValue(DS('Number'))) {
					DS('Digits') = DigitsFromString(Num);
					DS.Post();
				}	
			}
		}
		return true;
	}
}

Т.е. экспорт - без подчиненной (на AfterRecordExport), а импорт с подчиненной (на скрине настройки)

Дмитрий, Спасибо!
Сделал Экспорт КонтакнойИнформации в 1С на AfterRecordExport. Все работает.
Вместо РегистрыСведений сделал:

var Contragent = Select1C.Ссылка.ПолучитьОбъект();
var newAddress= Contragent.КонтактнаяИнформация.Добавить();
newAddress.Представление = Communication4;
     ...
Contragent.Записать();

Т.к. 8.3 с РегистрыСведений как-то не работает.

Email пишет в 1С в нужное место в Представление, в ЗначениеПоле (XML формат) и т.п. И отображается на форме.
Но, только один момент который не работает - это предварительное удаление записей в КонтактнаяИнформация. Иначе одна и таже запись там будет накапливаться.
Код выше с удалением ("//удалить все адреса и средства связи"), не срабатывает.
Подскажите, как в моем случае удалить предварительно КИ?

Не могу попробовать... Так не работает?

var Contragent = Select1C.Ссылка.ПолучитьОбъект();
var ci1C = Contragent.КонтактнаяИнформация.СоздатьНаборЗаписей(); 
ci1C.Отбор.Объект.Установить(Select1C.Ссылка);        
ci1C.Записать();
Показать все комментарии

Добрый день.

1. Как отпраить GET-запроса на сторонний ресурс,получить ответ в формате json?
2. Отобразаить полученные данные в карточке клиента (контрагенты и контакты)?
3. Это программировать надо? Если да, то куда вписывать код?

Спасибо!

Нравится

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

Получить текст ответа сервера можно при помощи объекта MSXML2.XMLHTTP.6.0.

var webAddress = 'http://example.com/example';
var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.6.0");
xmlHttpReq.open("GET", webAddress, false);        
xmlHttpReq.send();
var MyText = xmlHttpReq.responseText;

Он возвращает текст (в Вашем случае JSON), его можно превратить в JS-объект кодом вроде:

eval('(' + MyText + ')')

Как отобразить, зависит от конкретной реализации и техническго задания (сразу при открытии карточки, принудительно по кнопке или, может, регулярно по таймеру).
Это действительно требует программирования, код впишется в один из методов скрипта карточки или скрипта датасета, опять же, в зависимости от того, что именно хотите сделать.

А есть на скринах,где показывается,как внедрять код в скрипт в СРМ.
Я как понимаю,требуется написать код,внедрить его.
Я совсем новичек в системе.

Предыдущий комментарий был по 3.Х. Если у Вас 7.5, там всё иначе. Для вопросов по ней есть специальный раздел.

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

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

подскажите пожалуйтста, можно ли использовать возможности полнотекстового поиска mssql2012 в террасофт 3.4 ?

Или может быть есть идеи или готовые решения как это реализовать.

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

Нравится

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

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

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

Павел, спасибо!

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

Приведу пример на Контрагентах.

  1. Открываем сервис sq_Account ([Accounts\General\Main Grid\sq_Account])
  2. Добавляем новый фильтр к запросу [Custom SQL Filter]
  3. В созданном условии пишем свое условие
  4. Сохраняем запрос

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

Приведу пример готового решения поиска.

1. В sql пишем функцию, которая выполняет поиск:

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
create function [dbo].[tsf_GetContactIDsPr](@CONTAINSText nvarchar(255))
returns @Result table(ID uniqueidentifier)
as
begin
	set @CONTAINSText = rtrim(ltrim(@CONTAINSText));
		set @CONTAINSText = @CONTAINSText + '*';
		set @CONTAINSText = '"' + @CONTAINSText + '"';
		insert into @Result
		select ID
		FROM [dbo].[tbl_Contact] AS [tbl_ Contact] 
		WHERE (CONTAINS([tbl_ Contact].[Description], @CONTAINSText))	
		end
 
	return		
End

2. В Террасофт в sq_Contact добавляем пользовательский sql-фильтр

3. В фильтре прописываем вызов функции

Exists
(
select *
from dbo.tsf_GetFileIDsCONTAINSVarious(:DescripWords) b
where b.ID = [tbl_Files].[ID]
)

4. Сохраняем изменения в сервисе.

5. Активируем фильтр

var DescripWords =edtSearch.Value; //поле поиска
if (!IsEmptyValue(DescripWords)) {
	ApplyDatasetFilter(Dataset, DescripWordsFilters, DescripWords, true);
}
Показать все комментарии

Задача – настроить синхронизацию Terrasoft (3.3.1.163) и Outlook 2010

Порядок выполнения – сначала выйти из Outlook, а потом запустить специальную утилиту. Она находиться в папке где установлен Террасофт [Путь установки] \Terrasoft\Bin\ TSMSOfficeLibraryConfigurator.exe. Запустив ее нужно поставить галочку напротив [Microsoft Outlook] и нажать [Применить]. Потом запустив MS Outlook, там должна появиться панель надстройки Террасофт.

Результат – работает некорректно
Через Outlook почта как и прежде отправляется нормально, а вот с Terrasoft есть несколько проблем:
1) когда приходить письмо на русском языке – показывает не в той кодировке
2) адреса от кого/кому – пустые
(см. вложение 1 )
3) при создании нового сообщения выдает – «Microsoft Office Outlook не установлен в системе”
(см. вложение 1 )

Помогите решить вопросы.

Спасибо.

Нравится

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

Добрый день.

Описанную Вами ситуацию в пунктах 1 и 2 не смог воспроизвести у себя.
Для корректной работы с Outlook 2010 необходимо в сервисе scr_MSOfficeUtils подправить значение переменной SupportedMSOfficeVersionArray:

var SupportedMSOfficeVersionArray = new Array('14.0', '12.0', '11.0', '10.0', '9.0');

Добрый день!

Помогло! Решилось много проблем.
Но одна таки осталась - когда нажимаю синхронизацию с MS outlook выдает "Для системного параметра MSOutlookContactsIntegraionAddressesHomeTypeID не установлено значение" (см. вложенный файл)

Здравствуйте.
Кнопка "Синхронизация с MS Outlook" в разделе [Контакты] предназначена для импорта\экспорта контактов между Террасофт и Outlook. Для работы должны быть установлены значения для соответствующих системных настроек, которые соотносят поля карточки контакта в Террасофт и Outlook. Данные настройки можно открыть по в Террасофт по пути "Файл\Настройки\Системные настройки \Все настройки\Общие\Настройки интеграции с Microsoft Outlook".

Спасибо, Алдександр.

См. вложение - я правильно зашел? Что именно на что надо поменять?

Здравствуйте.
С описанием системных настроек, которые участвуют при синхронизации контактов с Outlook можно ознакомиться по ссылке: Terrasoft 3.X: Руководство администратора - стр.142

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

Добрый день.
При настройке в планировщике заданий импорта каждые 10 минут двух справочников появляется сообщение об ошибке "Корневой узел не инициализирован ".

Microsoft JScript Call Stack

wnd_JobMethodsGridAreaScript.Result = Exec(GetDatasetFieldValue(Dataset, 'ScriptUSI') [line: 178] { Result = ExecFunction(GetDatasetFieldValue(Dataset, 'ScriptUSI'), }

Нравится

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

Здравствуйте.
Для начала нужно проверить работает ли импорт без планировщика. Если "да", тогда можно попробовать последовательно исключать импортируемые поля. Таким образом возможно сузить круг поиска источника проблемы. Если импорт не работает и без планировщика, тогда нужно анализировать настройки параметров самого импорта.

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

Возможна ли интеграция Террасофт XRM 3.4 с Приват 24?

Нравится

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

Здравствуйте, Виталий!

В базовой версии продукта подобная интеграция отсутствует.

В рамках проектного решения подобную функциональность возможно реализовать.

Если это необходимо, пожалуйста, напишите мне в личные сообщения - я переадресую Ваш запрос Вашему ответственному менеджеру.

Про API Приват24 можете почитать здесь. В Terrasoft 3.X работа с веб-сервисами делается при помощи объекта MSXML2.XMLHTTP.6.0. Если возникнут вопросы по интеграции, обращайтесь.

"Зверев Александр" написал:Если возникнут вопросы по интеграции, обращайтесь.

Вопрос возник!!! Не прошло и года как клиент решил использовать апи и получать данные с привата24.
Я зарегистрировался как указано тут: https://api.privatbank.ua/p24registration.html
потом попытался сделать так: https://api.privatbank.ua/balance.html
Но мне выбила ошибка "empty request" Делал на рдп, какие проблемы могли возникнуть во время запроса?

Fiddler в помощь, смотреть какой запрос идет, какой ответ приходит. Далее разбираться по ситуации :)

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

Доброго времени суток, коллеги.
Есть бизнес-процесс примерно такой структуры:
Я правильно понимаю, что при выполнении задачи "Счет на товар" и выполнении элемента "Счет сформирован" БП будет стоять на точке слияния и если при этом отменить задачу "Счет на доставку" и выполнении элемента "БП отменен" этот бизнес-процесс у меня никогда не завершиться?

Нравится

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

Добрый день!

Все правильно понимаете, именно так и отработает данный БП

Спасибо за ответ.
Получается, у меня куча незавершенных бизнес-процессов. Влияет ли их наличие на что-нибудь и можно ли их скопом завершить?

Скорее всего в Вашем случае, они просто занимают место в таблице и имеют состояние [В ожидании]. По этой причине можете удалить все зависшие процессы.

Советую удалять в таком порядке:

  1. 1. Напоминания по задачам связанных с БП
  2. 2. Удалить задачи связанных с БП
  3. 3. Удалить БП

Удалять уже поздно: задачи нужны. Можно эти бизнес-процессы как нибудь штатно завершить? Поиграться c tbl_Workflow и tbl_WorkflowItem?

спасет вас что-то вроде этого
update tbl_Task set WorkflowItemID = null where WorkflowItemID in (select ID from tbl_WorkflowItem where WorkflowID = 'ID нужного процесса')

потом delete from tbl_WorkflowItem where WorkflowID = 'ID нужного процесса'
и наконец delete from tbl_Workflow where ID = 'ID нужного процесса'

бэкап перед "играми" не забудьте :smile:

Можете, для этого необходимо в таблице tbl_WorkflowItem заполнить такие поля:

  • [ActualExecuteDate]
  • [StateID] (установить состояние ws_Done)

Для таблицы tbl_Workflow заполнить поле [CompleteDate]

Спасибо.

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

Добрый день!
Террасофт 3.3.2 MSSQL
Стоит задача выгрузки накладной (шапки и табличной части продуктов) в формат xml

Подскажите, пожалуйста, какие методы для этого существуют.
Может быть есть какие-то примеры.

Нравится

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

Добрый день!
Маленький пример по сохранению данных в формат XML

function SaveXMLToFile() {
	var Dataset = Services.GetNewItemByUSI('ds_Account');
	Dataset.Open();
	var XMLStorage = GetNewXMLStorage();
	XMLStorage.LoadFromDataset(Dataset, 'QueryData');
	XMLStorage.SaveToFile('c:\\qq.xml');
	Dataset.Close();
}

Еще можно посмотреть примеры работой с XML в сервисе wnd_CalendarExchangeScript, начиная с функции SaveCalendarToFile

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