бизнес-процесс
прайс-лист
Бизнес-процессы
Разработка

Существует задача создать автоматический бизнес-процесс для создания прайс-листа контрагента, который запускается после создания контрагента.
В моем представлении это БП на одно действие (создание –прайса), а условие можно задать в настройках автоматического запуска.
Я использую действие чтение /запись данных. Здесь возникает первый вопрос – какая разница между «чтение /запись» и «открытие окна»? И в том и в другом случае ми можем сохранить информацию.
Основная проблема – перенос ID контрагента и создание ID новой записи (прайса). Как я догадываюсь, здесь нужно использовать параметры действия и здесь я уже ничего не понимаю.
Описание в руководстве администратора очень скудное, а на форуме не нашла понятного мне пошагового объяснения.

Нравится

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

Наталия,

действие [Открытие окна] предназначено для открытия любого окна системы,
например, карточки редактирования определенной записи. Через данный элемент можно создать новую запись, изменить существующую либо открыть окно справочника для выбора записи.

действие [Чтение/запись данных] используется в случае, если необходимо записать
какую-либо информацию в базу данных (без отображения карточки редактирования) или считать информацию из базы данных.

Что касается

"Фащук Наталия Тарасовна" написал:Основная проблема – перенос ID контрагента и создание ID новой записи (прайса).

пример есть здесь

Спасибо. Есть ли решение с помощью MS SQL?

Не понимаю я логики этих действий.
Объясните пожалуйста наглядно на моем примере.
Цель: создать БП с автоматическим запуском. После создания контрагента создание прайс-листа к нему (с деталей).
Буду очень признательна.

Наталия, пример реализации Вашей задачи:

1. Создать БП, состоящий из 3-х элементов:
Начало - элемент [Открытие окна] - Завершение

/system/files/21-01-2015_16-17-25.png

2. Создать в БП строковый параметр, который будет содержать идентификатор создаваемого контрагента:

/system/files/21-01-2015_16-22-46.png

Заполнение параметра реализовать в теле функции обработки события OnStart начального элемента.
Код:

function Item1OnStart(StartItem) {
    var ParentDiagram = GetDiagramByItem(StartItem);
    var RecordID = WFGetParamValue(ParentDiagram, 'AutoID');
}

3. В моем примере создание прайс-листа для контрагента выполняется посредством элемента [Открытие окна]. Свойства окна:

/system/files/21-01-2015_16-28-04.png

Код окна, которое будет открываться на добавление прайс-листа - wnd_AccountPriceEdit

4. Настроить автоматический запуск БП (через Файл - Настройки - Автоматический запуск процессов).

Во вложении прилагаю БП, который я построила для примера.

Показать все комментарии
MS SQL Server
разработка
репликация
Установка и Администрирование
Разработка

Добрый день, коллеги.
Для интеграции Террасофт CRM с внутренней учетной системой мне нужно понимать изменилась ли запись в таблице. Поля CreatedOn и ModifiedOn не очень подходят, потому что часть логики реализована через хранимые процедуры и эти поля могут не содержать актуальной информации.

В качестве сервер БД используется MS SQL Server, поэтому я решил попробовать добавить в таблицу поле типа timestamp, которое обновляется при любом изменении записи. Но, естественно, столкнулся с проблемами:
1. При попытке добавления поля в эту таблицу и сохранение изменений в БД я получаю ошибку "cannot update timestamp column". Я не знаю, как Террасофт обновляет таблицы в БД на основании конфигурации, но выходит, что система пытается обновить поле, которое в конфигурации не описано.
2. Если выгрузить сервис такой таблицы в файл, а потом попытаться загрузить обратно, то получаю ошибку "Duplicate hash list entry ", где это идентификатор сервиса в конфигурации.

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

Нравится

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

Здравствуйте, Riptor.

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

Прошу уточнить, почему бы просто не добавить новое поле "Дата/время" через конфигурацию и писать данные в него, к примеру, триггером?

Добрый день, Андрей.

"Безродный Андрей" написал:почему бы просто не добавить новое поле "Дата/время" через конфигурацию и писать данные в него, к примеру, триггером?

Скорее всего так и придется сделать. Думал, что проще поле добавить в 3 десятка таблиц, чем триггеры. С другой стороны интересно, почему платформа Террасофт поля CreatedOn и ModifiedOn не заполняет в триггере. Производительность?

Riptor

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

Показать все комментарии
Скрипты
Разработка

Здравствуйте! Очень нужна Ваша помощь!!! Проблема заключается в том, что в скрипте где-то допущена ошибка, но распознать ее я пока не могу. Ошибка при сохранении карты контрагента: Account.ModifiedCommunicationPosisitionArray.length. Параллельно с этим появляется ошибка в карте контакты при попытке ее сохранения. Помогите, пожалуйста, разобраться! Буду признательна за любую помощь!

Нравится

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

вот так выглядят ошибки в карточке

Здравствуйте, Анна!

Вероятнее всего, параметр ModifiedCommunicationPosisitionArray не существует.

Но более точно сможет сказать отладка.

Необходимо:

1) Включить отладку скриптов в реестре Windows:
HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings

Установить значение параметра JITDebug с 0 на 1.

2) Установить инструментарий для отладки:

либо Microsoft Script Debugger:
http://www.microsoft.com/en-us/download/details.aspx?id=22185
либо Microsoft Visual Studio Express 2012:
http://www.microsoft.com/ru-ru/download/details.aspx?id=34673

Visual Studio удобнее и предпочтительнее, но занимает больше времени и места для установки.

После настроек перезайдите в клиентскую часть и сохраните контрагент.
Ошибка "упадет" в отладчик, а дальше необходимо пошагово смотреть значения переменных для локализации причины ошибки.

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

Анна,

предположительно проблема возникает в функции SelfOnDatasetAfterPost:

function SelfOnDatasetAfterPost(Dataset) {
GiveRightsToRecordOwner(Dataset);
if (Account.ModifiedCommunicatonPositionArray.length) {
ActualizeCommunicationEx(Dataset,
Account.ModifiedCommunicatonPositionArray, 'AccountID');
}
...
}

Необходимо проверить в отладчике, чему равно значение параметра:

function ds_AccountOnDatasetBeforePost(Dataset, DoPost) {
Account.ModifiedCommunicatonPositionArray =
GetModifiedCommunicatonPositionArray(Dataset, Account.CommunicationCount);
...
}

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

function SelfOnDatasetAfterPost(Dataset) {
/*if (Account.ModifiedCommunicatonPositionArray.length) {
ActualizeCommunicationEx(Dataset,
Account.ModifiedCommunicatonPositionArray, 'AccountID');*/
}
...
}

спасибо большое, проблему решила)))

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

Задание: Сделать импорт/экспорт данных контрагента/адресов и средств связи с контактной информацией
Сделано: работает импорт/экспорт контрагентов, импорт адресов, телефонов, емайлов, веб
Проблема: не могу экспортировать Адреса. Пишет "Экспорт детали не закончен". Смотрел эту тему: https://community.terrasoft.ua/forum/topic/7046 - мало помогло.
Скрин
тип прописал в функции OnBeforeRecordExport(Param, Dataset, Select1C)

Select1C.Тип = Param.Obj1C.Перечисления.ТипыКонтактнойИнформации.Адрес;

Нравится

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

покажите по какому полю у вас связаны подчиненная и родительская настройки.

Значение полей "Поле родителя в 1С" и "Поле родителя в TSCRM" такие же как у вас на скрине.

Я экспорт адресов реализовывал вручную скриптом, на событии OnAfterRecordExport сущности "Контрагенты":

пс: у меня там еще используется план обмена, поэтому на строки где встречается "ОбменДанными" не обращайте внимание.

//удалить  все адреса и средства связи	
	var ci1C = Param.Obj1C.РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); 
	ci1C.Отбор.Объект.Установить(Select1C.Ссылка);
	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');
			ci1CMain.ОбменДанными.Получатели.АвтоЗаполнение = false;	
			ci1CMain.Записать(false);
		}		
		ds.GotoNext();
	}
	ds.Close();
//средства связи
Показать все комментарии

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

Перехожу на версию 351 и теперь в гриде Продаж при клике в строке по например Клиенту переходим не к карточке редактирования (как в 332) Клиента, а открывается эта Продажа, её карточка.
Подскажите, как сделать, чтобы открывались Карточки (Клиент, Контакт и т.п.), если кликать по данным в столбцах?

Нравится

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

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

Вопрос закрыт.

Показать все комментарии
.net
terrasoft press
Установка и Администрирование
Разработка

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

Простите за дилетантский вопрос, но я уже сбился с ног искать решение.

Есть установщик Terrasoft Press 3.3.0.45. Поставлена задача поставить на комп с Win7 x64. Но установщик просит версию .Net Framework 3.5 Sp1. В самой ОС уже установлен Framework 3.5.1, который по идее включает в себя весь функционал нужной библиотеки, но установщик все равно требует 3.5.

Как же теперь быть? Утилиты проверки установки .Net показывают, что сбоев нет. Все обновления установлены.

Спасибо.

Нравится

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

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

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

Здравствуйте.
Дело в том, что Windows 7 не фигурирует среди декларируемых клиентских ОС для Terrasoft 3.3.0. Соответственно такое взаимодействие не проверялось. Рекомендую Вам обратиться в поддержку (support@terrasoft.ru) для решения вопроса.
Спасибо.

Спасибо за ответ. Буду писать в Support.

Показать все комментарии
ActiveX Terrasoft 3.4.0
Технические вопросы
Разработка

Был создан ActiveX control на c# - RichTextBox с измененным контекстным меню (пробовали и TextBox). В срм у данного контрола не работают стрелочки для перемещения по тексту. В случае TextBox'a, не работает еще и Ctrl+A. Пробовали разные версии .net Framework. Получается, из клиента не передается в ActiveX контрол нажатия стрелочек. Куда смотреть? В чем может быть проблема?

Нравится

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

Проверил на 3.5.2: TextBox - Ctrl+A работает, RichtextBox - стрелочки работают. На 3.4.0 к сожалению проверить возможности нет, но если не работает - может есть смысл просто обновиться до 3.5.2?

Показать все комментарии
ошибка открытия источника данных
Технические вопросы
Разработка

Добрый день! Подскажите пожалуйста в чем может быть проблема. Переодически выскакивает вот такой лог:

Нравится

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

Здравствуйте, Анатолий!

Просьба прикрепить изображение в более большом разрешении, так как нет возможности проанализировать снимок экрана.

Спасибо.

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

Добрый день!
Вопрос в следующем: какие условия необходимы для того, чтобы установить TAPILine.IsActive = true?
Линия Cisco видна в выборе Devices, но по какой то причине не становиться активной, при присвоении true остается false.
Подключение к Cisco Call Manager с использованием Cisco TSP Driver.

Нравится

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

Добрый день, Иван.
Попробуйте подключить телефон к этой линии.

К линии подключен софтфон Cisco IP Communicator и он запущен. Через виндовый dialer по этой линии набор работает без проблем.. Может нужно что то еще проверить?

Попробуйте воспользоваться утилитой tapi line watcher и проверить можете ли вы вообще подключится к этой линии.
Таким образом мы сможем локализовать проблему. Если подключится не получится, то некорректно настроен TAPI драйвер. В противном случае проблема в настройках terrasoft.

В выборе доступна линия Cisco Line: [SEP001FD087E48A] (1001) , она выбирается нормально. Вызов прошел после набора Destination Number. значит проблема в ТС?

проверте настройки TAPI, так как вы не можете получить управление этой линией

Тарас, я исправил сообщение, просто не сразу разобрался как пользоваться утилитой..
Смог сделать набор номера. Я так понимаю проблема в ТС? Или под управлением линией подразумевается что то другое?

Посмотрел свойства линии: Available стоит true, Handle и MediaModes = 0, DeviceName и Address прописаны корректно, но Active не хочет становиться упорно... Необходимо знать какие действия происходят на изменении состояния линии в TSTAPILibrary, чтобы отследить проблему.

В продолжение телефонного разговора устанавливается всегда значение «false» из-за отсутствия лицензий на модуль телефонии. Ниже высылаю кусок кода, предоставленный от специалиста отдела разработки, в котором определяется значение данного параметра в зависимости от наличия лицензии на определенный модуль:

procedure TTAPILine.Set_IsActive(AValue: WordBool);
var
VerifyCompetitiveResult: WordBool;
begin
AValue := AValue and
IDRM('33rwd', InternalCurrentUser, CallCentreModuleName, 'TRIO3',
VerifyCompetitiveResult);
Line.Privileges.Owner := true;
Line.Active := AValue;
end;

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

Добрый день.
Есть у меня wnd_CallEdit
Я написал код который удаляет звонки определенного после закрытия wnd_CallEdit.
Подскажите как мне после закрытия окна обновить и wnd_CallGridArea. Чтобы удаленный звонок пропал из грида.

Нравится

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

Здравствуйте, Константин!

Попробуйте вот так:

var CallGridAreaDataset = Self.Attributes('NotifyObject').ComponentsByName('dlData').Dataset;
RefreshDataset(CallGridAreaDataset);

P.S. Проверьте, чтобы был подключен скрипт scr_DB, т.к. функция RefreshDataset описана там.

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