датасет
методы датасета
Скрипты
Разработка

Мне нужно переопределить метод GotoNext() датасета, чтобы он выполнял помимо стандартной своей функции еще одно дополнительное действие. Переопределение метода позволит избежать масштабных единообразных изменений в коде.

Есть ли такая возможность в Terrasoft 3.X?

Буду благодарен за примеры.

Нравится

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

Это не оно?

function ds_AccountOnDatasetBeforePositionChange(Dataset) {
	//TODO
}
 
function ds_AccountOnDatasetAfterPositionChange(Dataset) {
	//TODO
}

Или нужно во всех таблицах сразу?

"Зверев Александр" написал:Или нужно во всех таблицах сразу?

Это могут быть разные датасеты, не один какой-то конкретный, а какой попадется в тот момент.
В принципе, можно присвоить свой обработчик на событие AfterPositionChange.

Есть функция SetObjectEventDispatcher.

Пример в конфигурации:

//-------------------------------------
// wnd_MailTemplateLinkGridAreaScript
//-------------------------------------
 
...
 
 
function FillDataset(Dataset) {
...
}
 
 
function DoAdd() {
	var Dataset = MailTemplateLinkGridArea.ColumnsDataset;
	if (!Dataset) {
		Dataset = GetSingleItemByCode('mds_DictionaryTemplate', 
			'wnd_MailTemplateLinkGridAreaScript');
		Dataset.Caption = "Поле для связи сообщения";
		SetObjectEventDispatcher(Self, Dataset, Dataset.Name, 'OnDatasetAfterOpen',
			'FillDataset');
...
}

спасибо, пригодится

Показать все комментарии
Возобновление Бизнес-процесса после аварийного завершения работы клиента
Бизнес-процессы
Разработка

Добрый день!
Возник вопрос:
Каким образом можно возобновить Бизнес-процесс с текущего шага, если в течении его выполнения произошёл сбой системы (завис клиент, перегрузилась рабочая станция и т.д.), в следствии чего была некорректно завершена работа?
В реестре процессов бизнес-процесс не отображается.

Нравится

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

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

Если процесс был запущен - он должен отображаться в реестре "Процессов". Там же есть кнопка "Выполнить шаг", которая запускает тот элемент на котором БП был остановлен:

Спасибо за ответ. Но как я писал выше:

"Коновалов Игорь" написал:В реестре процессов бизнес-процесс не отображается.

Такое происходит если, например, текущим элементом БП является скрипт или текущим элементом является задача с состоянием "Выполнена".
Вопрос открыт.

Игорь, можно попробовать добавить кнопку в реестр "Процессов", по нажатию на которую выполнить код:

var ItemID = 'идентификатор шага';
if (WFGetItemState(ItemID) == ws_Done) {
		ShowWarningDialog("Выбранный элемент процесса завершен. Обновите реестр");
		return;
	}
WorkflowGridArea.WorkflowEngine.ProcessWorkflowItem(ItemID);

Идентификатор шага нужно взять из tbl_WorkflowItem, с фильтрацией по WorkflowID и по StateId (Name).

В таком случае у меня вопрос: как мне идентифицировать тот или иной элемент из таблицы tbl_WorkflowItem по, например, ID продажи - если он храниться в параметрах БП?

Игорь, думаю только парсить содержимое поля Parameters.
Первоначально конвертировать его в текстовый формат

select cast(cast(Parameters as varbinary(max)) as varchar(max)) from tbl_WorkflowItem

Затем работать с полученным текстом.

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

В реестре сущности1 нажимаю: Связать с новой сущностью2. Открываю окно создание сущности2 с Self.Attributes('Сущность1ID'). Не могу понять как пробросить Self.Attributes('Сущность1ID') на DataSet, в событие AfterPost нет доступа к Attributes('Сущность1ID') окна. На событиях самого окна, то запись еще не создана, то dlData уже закрыто и информация о присвоенном ID сужности2 потеряна. Вопрос, как при создание новой записи считать атрибут открытого окна и связать создаваемую запись с другой произвольной записью?

Нравится

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

Ответ:
function btnOKOnClick(Control) {
тут dlData.Dataset('ID') доступно, сохраняем ID, оно генерится заранее
scr_BaseDBEdit.btnOKOnClick(Control);
тут dlData.Dataset('ID') уже не доступно, запись создана, можно связывать с Self.Attributes('Сущность1ID')

Я бы это делал на BeforePost, а может на OnPrepare в скрипте окна.
D этих случаях и датасет еще открыт и атрибуты никуда не пропали.

if (Self.Attributes('Сущность1ID')!= null) dlData.Dataset('Сущность1ID') = Self.Attributes('Сущность1ID');

Я так понял у вас есть сущность1, есть сущность2, в которой есть привязка к сущность1.
Или уже вас есть сущность1, сущность2, и еще таблица, которая их связывает?

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

function CreateNewRecordButton_onClick(Control) {
var ID1 = grdData.SelectedIDs;
var Attributes = new Dictionary();
var DefaultValues = new Dictionary();
DefaultValues.Add('ID1', ID1);
ShowEditWindowEx('wnd_MyWindow', Attributes, DefaultValues);
}

В этом скрипте массив DefaultValues - массив для инициализации полей датасета открываемой карточки значениями по умолчанию.
Attributes.Add('RecordID', someID) - нужен в том случае, если нужно не создать, а открыть уже существующую запись.

"Сазанов Александр Владимирович" написал:
Или уже вас есть сущность1, сущность2, и еще таблица, которая их связывает?

Да

Всем спасибо, проблему свою решил.

Показать все комментарии
BeginUpdate
EndUpdate
IsEnabled
Технические вопросы
Разработка

Добрый день!

Есть следующая ситуация: грид, на событии dlDataOnDatasetAfterPositionChange определяется свойство кнопки внизу грида IsEnabled.

Когда по логике происходит изменение свойства, то все кнопки, которые стоят справа "передергиваются", что выглядит некрасиво.

Пробовал испольтзовать BeginUpdate() / EndUpdate() у самой кнопки, у frmButtons, у самого грида, у формы в которой встроен грид - ничего не помогает...

Подскажите пожалуйста, как правильно заставить форму / контейнер прекратить отрисовываться пока меняется свойство элемента?

Нравится

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

Насколько знаю, между 3.3.2 и 3.4.0 был существенно переписан графический движок. Не факт, что получится что-то исправить без обновления версии.

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

Попробуйте лочить (т.е. BeginUpdate/EndUpdate) окно (window), и при этом убедитесь, что других локов в этот момент не происходит. Иначе Ваше окно будет автоматически разлочено, что связано с особенностью в 3.3.2.
В 3.4.0 можно "лочить" и отдельные фреймы:

http://www.community.terrasoft.ru/blogs/7103

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

В запросе к таблице tbl_Candidates есть колонка Age с текстом SQL "DATEDIFF(yy, tbl_Candidates.DOB, GETDATE())"
В соответствующем датасете у этой колонки стоит птичка "Поле фильтрации" и колонка выводится в списке колонок для построения фильтра.
При попытке фильтрации по Age MSSQL Server выдаёт ошибку Invalid column name 'Age'.

Вопрос: как правильно фильтровать по колонкам с текстом SQL?

Нравится

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

После пяти минут раздумий обернул в subquery. Работает.
Но может быть есть канонический способ?

Здравствуйте, Роман!
По колонке с SQL-текстом в принципе нельзя фильтровать. Там ведь может быть выборка целой таблицы, например.

Ого! Вижу, все приходят к одному и тому же результату http://www.community.terrasoft.ru/blogs/4397

"Андрей Каспаревич" написал:

Здравствуйте, Роман!

По колонке с SQL-текстом в принципе нельзя фильтровать. Там ведь может быть выборка целой таблицы, например.

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки

Андрей, запрос колонки с SQL-текстом, возвращающим больше одной колонки или больше одной записи, не пройдёт синтаксическую проверку, будет отклонён сервером бд и вернёт ошибку.

"Рыжий Роман Леонидович" написал:Но может быть есть канонический способ?

Роман, такого способа нет.

Роман, извините, затупил.
Но, в любом случае, фильтровать по такой колонке нельзя.

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

С помощью планировщика заданий настроил запуск экспорта в 1С заказа поставщику (утилита синхронизации, функция ExportObject). В этой функции установил точку останова для отладчика (debugger). Планировщиком функция вызывается и возникает окно выбора отладчика, выбираю MS Visual Studio и появляется пустое окно отладчика.

Кто знает как мне отладить с помощью дебагера скрипт функции (хочу увидеть передаваемые в нее параметры)?

TS XRM 3.4.1
Win XP SP3

Нравится

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

Здравствуйте, Андрей!
Если вариант Дмитрия Вам не подходит, то проверьте, подсоединен ли Visual Studio к процессу. Также прошу предоставить скриншот, иллюстрирующий проблему.

Дмитрий, спасибо за ссылку.
Проверил из клиента Террасофт - скрипт отрабатывает нормально, а вот при вызове через планировщик заданий - не отрабатывает корректно. Мне все-таки нужно каким-то образом отладить именно выполнение скрипта самим планировщиком заданий.

Андрей, здравствуйте.
Начнем с простого. Создал тестовый пример, вот настройки:
Параметры задания

Параметры функции скрипта

Служба планировщика заданий запущена:
Служба

По полю "Последний запуск" видно, что задание планировщиком запускается:
Признаки

А в реальности никакого диалогового окна не появляется. Как добиться его появления? Как отлаживать такую ситуацию?

TS XRM 3.4.1
Win XP SP3

Андрей, попробуйте в настройках Visual Studio отключить отладку Managed и Native кода:

"Андрей Каспаревич" написал:Андрей, попробуйте в настройках Visual Studio отключить отладку Managed и Native кода

Попробовал - в таком случае отладка вообще не возникает.
Андрей, у вас получилось отработать корректно то тестовое плановое задание, которое я привел в пример?

а если вручную присоединиться дебаггером к TSJobManagerService.exe?

Андрей, не проверял. Но уточнил информацию по поводу взаимодействия с графическими элементами.
Так вот, функции, шаг выполняться не будет в том случае, если в нем происходит обращение к любым графическим компонентам.
Прикрепляю полезную информацию по поводу планировщика.
faq.docx
nastroyka_planirovshchika_zadaniy_3.4.docx
tsmailsystem.zip

"Андросов Дмитрий" написал:а если вручную присоединиться дебаггером к TSJobManagerService.exe?

Такого процесса в списке доступных процессов для подключения я не нахожу.

"Андрей Каспаревич" написал:Так вот, функции, шаг выполняться не будет в том случае, если в нем происходит обращение к любым графическим компонентам.

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

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

Андрей, завтра проведем тестирование и по результату Вам сообщим.

Андрей, извиняюсь за дезинформацию. Код, выполняемый планировщиком задач нельзя отладить.

Немного дополню, отсутствие возможности отладки связано с тем, что планировщик запускается как служба, а Visual Studio не умеет отлаживать службы, только процессы.

Показать все комментарии
описание обновлений
Установка и Администрирование
Разработка

Где то можно смотреть чем одна версия клиента отличаеться от другой? У меня 4 клиента на 3.4 версию, причем самый последний не работает с текущей БД, последний работаюший 3.4.0.141.

Нравится

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

Михаил Евгеньевич, такая информация предоставляется службой технической поддержки индивидуально по запросу.
Напишите, пожалуйста, на support@terrasoft.ru отличия между какими сборками версии 3.4 Вас интересуют, Вам подготовят данную информацию.

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

Добрый день!
Скажите, пожалуйста, при создании пользовательского запроса от чего зависит попадет ли таблица в список, который выделяется синим цветом?
У меня у созданного раздела "Заказы" есть деталь "Исполнители". А у детали "Исполнители" есть деталь "Оборудование". Так вот в запросе при созаднии детали к таблице "Исполнители" не могу выбрать таблицу "Оборудование", ее нет в списке.
Связь таблиц установил в таблице "Оборудование", создал внешний ключ с таблицей "Исполнители".

Нравится

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

"Молчанов Дмитрий Павлович" написал:"Исполнители" не могу выбрать таблицу "Оборудование", ее нет в списке.

у вас в детали (судя по скрину) используется таблица-связка "Исполнители в заказах". Вы связь добавили именно в эту таблицу?

Да, в таблице "Исполнители в заказах" связь с таблицей "Заказы". А в таблице "Оборудование" связь с "Исполнители в заказах".
Тут вроде верно.

Дмитрий, используйте добавление запроса через карточку редактирования:
/system/files/13-01-2014.png

В этом случае все таблицы по обратным связям доступны (скриншот по Вашему разделу):

/system/files/13-01-2014_15-51-42.png

Наталья, спасибо.

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

Как то можно отключить тотальное сохранение всех входящих писем но оставить автоприкрепление писем с определенной сигнатурой к инцидентам (наверное это кастомная функциональность у нас, не знаю).

Ну и может кому надо будет (скрипт потихоньку(если их очень много) убивает письма не связанные с полезными сущностями):

DECLARE @RowsCnt INTEGER
SET      @RowsCnt=1
WHILE (@RowsCnt12*31 )
    BEGIN
        DELETE FROM tbl_MailMessage WHERE
        (NOT EXISTS(SELECT * FROM tbl_IncidentMessage WHERE tbl_IncidentMessage.MailMessageID=tbl_MailMessage.ID))
         AND
        (NOT EXISTS(SELECT * FROM tbl_ChangeRequestMessage WHERE tbl_ChangeRequestMessage.MailMessageID=tbl_MailMessage.ID))
         AND
        (NOT EXISTS(SELECT * FROM tbl_TaskMessage WHERE tbl_TaskMessage.MailMessageID=tbl_MailMessage.ID))
        AND ID IN (SELECT  A.ID FROM tbl_MailMessage A WHERE Day(CreatedOn)+(Month(CreatedOn)-1)*31=@RowsCnt )
        SET @RowsCnt=@RowsCnt+1
    END

Нравится

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

Михаил Евгеньевич, отключить сохранение всех входящих писем Вы можете в функции SaveMailItem сервиса scr_MSOutlookLibrary.
За добавление писем в БД отвечает строка кода:

var MessageID = SaveMailItemToDatabase(MailItem, Options.IsReceiving);

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

Если будут дополнительные вопросы - обращайтесь.

Добрый день! Подскажите, пожалуйста, "Автопривязка" (кнопка в OUTLOOK) должна автоматом собирать письма или она при каких-то условиях отваливается? Не могу сообразить: вроде собирает-собирает пару часов, потом перестает...
как она работает? можно ли как-то влиять на ее работу (настраивать непрерывность, периоды проверки новых писем)?

Автопривязка должна привязывать все письма к контакту, контрагенту по email. Может отваливаться только в случае потери интеграции.
Проверьте чтобы в настройках пользователя (Файл - Настройки - Настройки пользователя - Email) были установлены опции:
- Автопривязка принимаемых сообщений.
- Автоматическое соединение с активной Terrasoft.

Проставил галочки, но все-равно как-то не работает

Terrasoft 3.3.2.305

точнее работает, но как-то через раз...

AlexLS, уточните, какие именно письма не привязались и есть ли между ними какая-то закономерность?

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

А еще скажите, какой Outlook Вы используете?

Outlook 2007.

Запущены две сессии на одном компьютере, в каждой по террасофту и аутлуку, под разными доменными пользователми.

В одной сессии вроде входящие грузятся без проблем.

А вот в соседней через раз. По нажатию "Автопривязка..." адресованные непосредственно контакту, письма загружает. Почему автоматически, без нажатия кнопки, не загружаются письма - понять не могу.

Не адресные письма, которые направлялись на общий ящик - вообще не грузит :-(

Добрый день!

На сколько я понял, то данный ПК выстапает в роли терминального сервера, на котором работают разные пользователи.

Если это так, то прошу на этом ПК зарегистрировать библиотеки Terrasoft от имени Администратора, а также проверить, что бы в файле TSMSOfficeConfig.exe были установлены значения Word, Excel, Outlook:

А может быть такое что Outlook-плагин "автоматом цепляет" только НОВЫЕ письма? А те которые появились в аутлуке до запуска плагина просто игнорит?
Есть скрипт автозагрузки писем (не по кнопке!!!) или зашито в ядре?

Добрый день!

Автопривязка писем работает для всех писем, которые придут в Microsoft Outlook после активации признака в настройках пользователя и соединения Outlook с Terrasoft.

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

"Безродный Андрей" написал:Письма, которые пришли на почту ранее, т.е. до установки настроек пользователя и соединения с базой, автоматически загружены не будут

Спасибо, Андрей!

Всем доброго весеннего утречка, у кого доброе и весеннее, ну а остальным здрасьте!

Есть мега-проблема: на crm-сервере висит аутлук под "общественной" учеткой, на которую ДОЛЖНЫ падать письма! Письма падают, но вот автозагрузка в Террасофт отваливается спустя несколько часов после запуска. Как я понимаю надо постоянно перезапускать аутлук или можно что-то сделать???

Добрый день.

Прошу уточнить, а что именно "отваливается"? Надстройка отключается или остается на месте, но письма перестают загружаться?

В любом из случаев, попробуйте (в нерабочее время) выполнить повторную регистрацию библиотек с помощью TSLauncher.exe от имени администратора Windows и снять/проставить галочки в TSMSOfficeConfig.exe. MS Outlook при этом должен быть закрыт, как и другие продукты MS Office.

"Безродный Андрей" написал:

Прошу уточнить, а что именно "отваливается"? Надстройка отключается или остается на месте, но письма перестают загружаться?


Спасибо, Андрей!
Письма в аутлук приходят (возможно приходят в тот момент когда пользователь "заглядывает" :-) ), панелька Террасофта висит в нормальном (авторизованном режиме), а вот пришедшие письма в CRM упорно не грузятся. Перезапуск аутлука и соединение с террасофтом на время дают автозагрузку (без нажатия кнопки), а с течением времени загрузка опять прекращается :-(

Перерегистрировать библиотеки попробую!

Если повторная регистрация библиотек не даст результата, напишите, пожалуйста, по данному вопросу на support@terrasoft.ru - перейдем на Email-переписку и будет планировать удаленное подключение.

"Безродный Андрей" написал:

Если повторная регистрация библиотек не даст результата, напишите, пожалуйста, по данному вопросу на support@terrasoft.ru - перейдем на Email-переписку и будет планировать удаленное подключение.


Спасибо Андрей! На support@terrasoft.ru меня уже послали на
http://www.terrasoft.ua/our_services/support/options

так что схожу туда :-( (но увы проплата от боссов зависит, а не от программера!!!)

Добрый день!

На некоторых компьютерах возникает проблема интеграции Outlook v.14.0.7116.5000 и Terrasoft v.3.4.1.101: слетают настройки представления списка писем. То есть открывая Outlook получаешь список из колонок "размер" и "категория".

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

В первую очередь стоит обновить бинарные файлы до последней версии и проверить актуальность проблемы на последней версии (3.4.1.171).

Получить актуальную версию можно по запросу в техническую поддержку (support@terrasoft.ru).

"AlexLS" написал:На некоторых компьютерах возникает проблема интеграции Outlook v.14.0.7116.5000 и Terrasoft v.3.4.1.101: слетают настройки представления списка писем. То есть открывая Outlook получаешь список из колонок "размер" и "категория".

Александр, коварный вопрос - колонки представления именно в Outlook? А если снести TS с этой машины, то Outlook приходит в норму и все настройки колонок сохраняются? Мне просто странным представляется влияние TS библиотеки на настройки представления...

"Александр Кудряшов" написал:Мне просто странным представляется влияние TS библиотеки на настройки представления

Мне тоже кажется это странным, но сотрудник поддержки, занимающийся установкой, уверял меня что такое у него происходит уже не однократно.

"Безродный Андрей" написал:Получить актуальную версию можно по запросу в техническую поддержку (support@terrasoft.ru).

Андрей, добрый день!
Отправил запрос в поддержку 22 сентября, к сожалению пока меня "динамят" :-(
Попробую позвонить и уточнить с чем это связано. Раньше на мой майл ответы приходили оперативно!

Добрый день!

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

"Безродный Андрей" написал:

Добрый день!

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


Андрей, спасибо! Наконец-то прислали!

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

Добрый день!
Сделал деталь для нового раздела (см. скрин).
На странице "Комплектующие" в гриде создал кнопку "На поиск цены".
При нажатии на кнопку нужно получить выделенные записи в этом гриде.

var Window = Control.ParentWindow;
var grdData = Window.ComponentsByName('grdData');
var CompletingIDs = grdData.SelectedIDs;

в итоге в CompletingIDs свойство Count всегда равно 0. Т.е. выделенные записи не могу получить.
В соседнем окне "Оборудование" все работает нормально.
Подскажите, пожалуйста, куда смотреть?

Нравится

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

самый простой вариант - в вашем гриде "Комплектующие" grdData на самом деле называется по-другому

Нет, тут все верно. Окно укаследовано от wnd_BaseGridArea. Там DataGrid по умолчанию grdData ставит.

Дмитрий, проверьте какое количество будет отображаться, если выделить несколько записей на детали [Комплектующие] (бывают случаи, когда SelectedIDs возвращает 0, если выделена 1 запись).
В том случае, если количество по прежнему будет равно 0, нужно анализировать реализацию детали (вложите, пожалуйста, сервисы).

При выделении нескольких записей все равно в SelectedIDs пусто.
Прикладываю сервисы. Разработка идет на TS Sales 3.4.1

Сервисы загрузила, завтра проведу тестирование и напишу Вам результат.

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

/system/files/11-01-2014.png

Наталья, спасибо большое.

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