Идея

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

Одобрена
1 комментарий

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

 

Данная задача уже заведена у соответствующей команды на реализацию в будущих версиях приложения. Данный функционал будет реализован в рамках приоритетности задач по данному разделу.

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

Доброго времени суток, коллеги!

Совершаю первые попытки использования бизнес-процессов, поэтому прошу сильно не пинать.
Задача. При изменении состояния инцидента на определённое значение и неизменении этого состояния в течение n-ного количества времени, необходимо сформировать напоминалку ответственному и создателю.
Моё видение решения.
Через "Автоматический запуск процесса" настраиваю запуск моего процесса по изменению данных в источнике данных Инцидент если новое значение состояния соответствует такому-то фильтру. Как гасить уже висящий процесс при смене состояния на другое пока не придумал, возможно через другой бизнес-процесс, в котором скриптом прописать окончание предыдущего.
Создаём бизнес-процесс, содержащий всего два действия:
1. Задержка на n-ное количество времени
2. чтение/запись данных, "запись значений параметров в базу данных", "создать новую запись" с источником данных "напоминание". В п.5 заполняю поля будущего напоминания: "Описание = текст напоминания", "Тип объекта = Инцидент", "Время = как указать текущее + 1-2 минуты?" И вопрос с п.4: указать взаимосвязь ключевого поля с параметром диаграммы. Видимо, здесь нужно указать, к какому инциденту будет прицеплено новое уведомление. Откуда заполучить номер? И ID ответсвенного и создателя инцидента как поймать?

У меня такой же вопрос

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

1. Через "Автоматический запуск процесса" настраиваем запуск БП через каждые M-минут (зависит от n и здравого смысла)
2. В БП:
- берем все инциденты, подходящие по признакам ("неизменении этого состояния в течение n-ного", для учета последнего изменения надо либо сделать поле, куда писать текущее время при изменении, либо включить историю)
- проверяем для выбранных инцидентов - нет ли уже напоминалок/вместо проверки можно просто удалять созданные ранее (по какому-то признаку + ИД инцидента)
- добавляем и/или обновляем напоминалки для выбранных инцидентов
Так у вас будут всегда (с промежутком в M-минут) актуальные напоминалки

Как вариант, можно сделать это в виде задания Агента-SQL.

Но на сам деле надо сделать по-другому)) При изменении состояния инцидента на нужное - ставить напоминалку через n-времени. При изменении состояния с нужного - стирать ее. И Все)

"Андросов Дмитрий" написал:Как вариант, можно сделать это в виде задания Агента-SQL

Если все ж надумаете делать именно регулярно выполняемые задания - всячески плюсую этот вариант!

Ставить напоминалку - это работа ручками, а именно её и хочется исключить, т.к. в этом случае в процесс вклинивается человеческий фактор. Сейчас у народа есть фильтр по заданному состоянию инцидента, и на него им лень перейти и проверить не появилось ли там что-нибудь.
В целом, мысль понял и принял. На самом деле, наверно в джобик SQL это засунуть проще будет.
1. Выбираю все инциденты в нужном статусе из tbl_Incident
2. Из tbl_IncidentLog вытягиваю max(CreatedOn) для данного инцидента. Если эта дата отличается от текущей более чем на N, проверяю наличие/отсутствие в tbl_Reminding строчки для этого инцидента. Если нет, инсертю её.
Теоретически, должно получиться. Пошел кодить.

"Булат Андрей Борисович" написал:Ставить напоминалку - это работа ручками, а именно её и хочется исключить

Имелся ввиду скрипт на сохранение объекта Инцидент. Кодом написать генерацию напоминания, работать будет автоматом

"Александр Кудряшов" написал:
Булат Андрей Борисович пишет:

Ставить напоминалку - это работа ручками, а именно её и хочется исключить

Имелся ввиду скрипт на сохранение объекта Инцидент. Кодом написать генерацию напоминания, работать будет автоматом


Тоже вариант.
Остаётся вопрос: как убивать неиспользованные напоминания, если инцидент из неправильного состояния переведён раньше наступления часа Х. Там-же в скрипте отслеживать? Всё-таки, вариант с периодическим заданием/джобиком эту логику отработает правильнее.

"Булат Андрей Борисович" написал:как убивать неиспользованные напоминания...Там-же в скрипте отслеживать? Всё-таки, вариант с периодическим заданием/джобиком эту логику отработает правильнее.

реализовать скриптом проще.

после сохранения инцидента (DatasetAfterPost):
- если состояние изменилось с другого на неправильное - поставить напоминалку на текущее время + n
[когда наступит время Х - напоминалка отрабоается (удалится или переставится) вручную тем, на кого она ставится, если час Х не наступит то:]
- если состояние поменялось с неправильного на другой - удалить напоминалку, если она есть

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

Реализовал таки через джобик SQL, ибо TSQL мне больше знаком :-) Вроде работает. Но... Напоминалку пользователь увидит только если запустит программу. У нас не все постоянно сидят в системе: не требуется это.
Отсюда вылезло продолжение задачи. Формировать не напоминалку а письмо. Тоже средствами MSSQL это возможно, или возвращаемся к первому сообщению - формирование бизнес-процесса?

"Булат Андрей Борисович" написал:Тоже средствами MSSQL это возможно, или возвращаемся к первому сообщению - формирование бизнес-процесса?

оба варианта рабочие, но БП лучше т.к. логика не выносится за рамки системы

ой нет, это же 3х)))
по-моему, лучше сделать джоб на отправку е-мейла)

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

ой нет, это же 3х)))
по-моему, лучше сделать джоб на отправку е-мейла)


Тогда подскажите, с какой стороны подлезть? В какие таблицы и что засунуть? И самое главное, с чьей стороны будет уходить письмо?

сформулируйте еще раз задачу с учетом того, что это е-мейл, а не напоминание

При нахождении инцидентов, находящихся в состоянии YY более заданного времени (селека соответствующая уже готова), необходимо отправить письмо ответственному и автору инцидента. Адрес берём из соответствующих контактов. Тема письма - простой текст. В тело письма неплохо было бы затолкать номер инцидента, наименование контрагента и "признаки" инцидента.

письмо отправлять средствами сервера SQL (sp_send_dbmail) или через ОС сервера (плохо представляю как)
я бы отправлял одно письмо на одного адресата (с информацией на все инциденты, касающиеся адресата)
в Террасофт письма, естественно, не сохранятся (да и не надо)

Дмитрий, спасибо! Счастье наступило!
Слепил через sp_send_dbmail. В кучу собирать не стал: один инцидент - одно письмо, чтобы не перелопачивать логику предыдущего джоба.

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

Добрые день,
Еще один вопрос по БП, как должны срабатывать напоминания для активностей, используя элемент "Задача" создаю Активность, отмечаю "Напомнить за",
1

Активность создается но без напоминая, приходится создавать дополнительный элемент и вручную изменять значения полей "Напоминание ответственному" и "Дата напоминания ответственному"
2

Версия Team 7.4.0.2628

У меня такой же вопрос

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

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

Добрый день, Олег.

При создании активности у Вас указано "Стартовать через 0 минут", а напоминание должно отработать за 1 минуту до начала. Я думаю из-за этого у Вас и не появляется напоминание. Попробуйте поставить значение "Стартовать через 2 минуты" должно все отработать корректно.

Добрый день, Тарас,
Спасибо за совет, сейчас попробую

Здравствуйте, Олег!

Похожий вопрос обсуждался на Community:

- http://www.community.terrasoft.ru/forum/topic/10496
- http://www.community.terrasoft.ru/forum/topic/10839
- http://www.community.terrasoft.ru/forum/topic/11325

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

Результат тот же, активность создается, но деталь "Напоминания" пуста, также активность не попадает в меню справа "Уведомления".
Дмитрий, темы что вы привели, скажем немного не то что мне нужно, там рассматриваются всякие надстройки вроде "Напоминание на активность через веб сервис" или "Запуск БП на срабатывание напоминания".
Мне же нужно просто стандартный функционал чтобы заработал, а он видимо сбоит, напоминания не ставятся, уведомления справа не появляются, причем если создавать "Звонок" с такими же параметрами, стартовать через 0, напоминать через 1, все отрабатывает верно, проставляется напоминание и появляется уведомление в правом меню "Уведомления"

Версия Team 7.4.0.2628

Здравствуйте, Олег!

Проверил на последней релизной сборке 7.4.1.589 (Team, ENU).

Ошибку не воспроизвел, - для активности с типом Задача и категорией Выполнить, а также для активности с типом Звонок создаются напоминания:

http://i64.fastpic.ru/big/2015/0201/d9/fc2f92129cd84579be765fda968b55d9.pnghttp://i67.fastpic.ru/big/2015/0201/cf/e0076aca5f2c061cb50b7aee1a50f3cf.png

Напишите, пожалуйста, заявку на support@terrasoft.ru для предоставления Вам сборки.

Добрый день, Андрей,
С помощью саппорта обнаружили проблему:
"Проблема кроется в отсутствии подключения к веб-сокетам (не телефонийным).
В консоли должна быть строка вида:
ws-connection opened for url:ws://web-site:2011/0/Nui/ViewModule.aspx.ashx"
После включения проблема исчезла. Спасибо

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

Не отправляет напоминания о визировании при создании договора.
Началось с того, что у нескольких пользователей при установке визы перестали создаваться напоминания следующему по списку визировавшему.
Теперь такое у всех, кто бы не создал договор, кто бы его не визировал, напоминание о визирование не уходит к следующему пользователю.
Сообщение о том, что напоминание отправлено, не появляется.
В коде программы 100% ничего не изменяли.

У меня такой же вопрос

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

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

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

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

Спасибо,
Это я уже проверял у всех стоит напоминание.
не помогло

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

Анна, спасибо.

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

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

Добрый день!

Очень беспокоит вопрос появления напоминаний о создании новых E-mail сообщений по инциденту. Не знаю в какой момент, но у ответственного пользователя по инциденту появляются напоминания о том, что у инцидента появилось новое E-mail сообщение. Посмотрев деталь E-mail в инцидентах я действительно нашел там новые сообщения. Никто их туда специально не привязывал. Значит, получается, что при разборе почты каким-то образом это сообщение автоматически привязалось к инциденту. Я догадываюсь, что автоматическая привязка происходит по теме сообщения и номеру инцидента. Но это не совсем корректно, т.к. к инциденту номер 200 привязываются сообщения с темой "АКЦИЯ! Рекламный авиатур в Черногорию 200 евро!".

Как настроить корректную работу данного функционала или отключить его вообще?

У меня такой же вопрос

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

"Ozzy" написал:Значит, получается, что при разборе почты каким-то образом это сообщение автоматически привязалось к инциденту. Я догадываюсь, что автоматическая привязка происходит по теме сообщения и номеру инцидента.

Да, так и есть. В скрипте scr_MailLinks это делают функции FindIncidentNumber и GetIncidentDataBySubject:

function FindIncidentNumber(Str) {
	var Mask = GetSystemParameterValueEx('IncidentMask', false);
	var NumList = Str.match(/(\d+)/g);
	if (!NumList) {
		return;
	}
	for (var i = 0; i < NumList.length; i++) {
		var Num = Mask.replace(/\%1/g, NumList[i]);
		var SafeNum = '(^|:|#|№|-|\\s+)' + NormalizeForRegex(Num) + '(\\s|\\.|$)';
		if (Str.match(new RegExp(SafeNum, 'ig'))) {
			return Num;
		}
	}
}
 
function GetIncidentDataBySubject(Subject) {
	if (!System.GetHasLicense('Incidents')) {
		return false;
	}
 
	var IncidentNumber = FindIncidentNumber(Subject);
	if (!IncidentNumber) {
	    return null;
	}
    var SelectQuery = GetSingleItemByCode('sq_GetIncidentDataByNumber',
		'MailLinks');
    SelectQuery.Parameters('IncidentNumber').Value = IncidentNumber;
    var Dataset = SelectQuery.Open();
    try {
	    if (IsDatasetEmpty(Dataset)) {
	        return null;
	    }
	    return LoadRecord(Dataset);
	} finally {
		Dataset.Close();
	}
}

Если эта логика вообще не нужна, то можно во второй функции в начале вписать return null; .

Если же хочется привязывать к инцидентам только нужные письма, можно договориться о формате номера (например, [200] или #200) и соответствующим образом модифицировать первую функцию.

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

Александр, воспользовался Вашим советом и отключил функционал полностью в функции GetIncidentDataBySubject. Но в результате по-прежнему появляются напоминания о привязанных письмах к инцидентам ((( Может еще где-то отключить надо?

Странно. То есть напоминания по новым письмам, пришедшим после изменения кода и перезапуска Аутлука?

Ну да. Изменения внес еще 20 августа, старые напоминания удалил. Но они продолжают появляться до сих пор. Тоже грешил на то, что не перезапустили программы, но уже столько времени прошло...

Ozzy, закомментируйте в function SaveMailItem(MailItem, Options) сервиса scr_MSOutlookLibrary строку:

Incident = GetIncidentDataBySubject(MailItem.Subject);

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

Если функция GetIncidentDataBySubject уже отключена изнутри, какой смысл отключать все её вызовы? Надо смотреть, может, похожая логика сделана ещё где-то отдельно.

Я же говорю, похожая функция реализована в 5 разных скриптах. Её реализация есть в scr_MailLinks, который Вы указали, а есть и в scr_MSOutlookLibrary, который указала Наталья. Необходимо найти правильный и заблокировать вызов.

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

Доброго времени суток!

Есть задача: при добавлении нового инцидента автоматически создавать напоминание группе пользователей (пока пытаюсь сделать хотя бы для всех пользователей).

Вопрос: при создании инцидента пытался присвоить полю ContactID датасета ds_Reminding ID группы "Все пользователи":

function CreateNewRemindings(Dataset) {
        var RemindingDataset = Services.GetNewItemByUSI('ds_Reminding');
        RemindingDataset.Open();
        RemindingDataset.Append();
        RemindingDataset.ValAsGUID('ContactID') = '{97490F89-2943-480D-9AFE-B1C95DE00010}';
        RemindingDataset.ValAsDateTime('RemindTime') = GetLocalDateTime();
        RemindingDataset.ValAsGUID('SubjectID') = Dataset.ValAsGUID('ID');
        RemindingDataset.ValAsGUID('SubjectTypeID') = '{8E742F80-1C1A-4657-8D46-F189F0640544}';
        RemindingDataset.Values('Description') = 'Добавлен новый инцидент!';
        RemindingDataset.Post();
        RemindingDataset.Close();
}

Но так не работает, выскакивает ошибка (прикрепил).
Как я понял, он пытается связать ID группы с ID контактов. Видимо все не так просто. :smile: Как это обойти?

У меня такой же вопрос

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

Обойти это не удастся. Нужно создавать напоминание каждому члену группы отдельно - посмотрите как это сделано например в scr_RemindingEdit при добавлении напоминания группе: формируется список контактов в группе и для каждого генерируется напоминание.
Можно оттуда функцию готовую и взять

Спасибо! Проблема решена.

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

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

Возник такой вопрос, можно ли совсем отключить напоминания в Terrasoft?
После запуска Terrasoft и просмотра в профайлере запросов обнаруживаю ежеминутный запрос проверки напоминаний

SELECT
COUNT(*) AS [Count]
FROM
[dbo].[tbl_Reminding] AS [tbl_Reminding]
WHERE([tbl_Reminding].[ContactID] = @P1 AND
[tbl_Reminding].[RemindTime]

Хотелось бы узнать, возможно ли от этого избавится?

Версия Terrasoft 3.1

У меня такой же вопрос

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

Если Вам нет необходимости использовать функционал напоминаний, закомментируйте обновление окна напоминаний в скрипте scr_Main:

function TimerOnTimer(Timer) {
	//ShowTimerWindow();
	//PrepareTimer();
}

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

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

Здравствуйте, подскажите как можно из бизнес - процесса при создании задачи создать и напоминание о этой задаче.

У меня такой же вопрос

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

Во вложении инструкция по созданию напоминания в БП.

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

Но в случае, если использовать этот метод, напоминания создаются только при условии, когда задание выполнено! Если переместить функцию в блок try, то напоминание создается, если задачу потом открыть еще раз.. почему такое может быть не понятно, но при дебаге видно, что датасет при вызове это функции еще пустой.

Николай, есть два варианта решения. Первый - если Вы перемещаете создание напоминания в блок try, необходимо перед его созданием проверять, существует ли в БД напоминание по этой задаче для текущего пользователя (неплохо было бы также применять фильтр по тексту напоминания, так как по одной и той же задаче может быть несколько разных напоминаний), и создавать его только в случае, если подобного напоминания нет.

Второй вариант (опять же, с предварительной проверкой) - создавать напоминание в обработчике btnOKOnClick карточки редактирования задачи (скрипт scr_TaskEdit). Создавать его необходимо после выполнения базового обработчика (блок, содержащий if (!scr_BaseDBEdit.btnOKOnClick(Control)) {...}), но перед блоком

if ((!TaskEdit.StatusChanged) || (!IsFinished) ||
	(IsEmptyGUID(WorkflowItemID))) {
	return;
}

,

так как после этого блока карточка задачи закрывается, если состояние не конечное.

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

Добрый день,

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

У меня такой же вопрос

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

Периодические задачи буду реализованы в 3.3.2

--
www.it-sfera.com.ua

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

При перетягивании задачи в расписании, например, с сегодняшнего для на завтрашний, возникает необходимость также "сдвинуть" напоминание по этой задаче на такой же промежуток времени.
Привожу ниже работающий и протестированный пример подобной реализации.
Необходимо в scr_SchedulerArea в функции UpdateDatasetRecordByEvent прописать следующий код (новый код выделен):

var DataFields = Dataset.DataFields;
var StartDateDataField = DataFields.ItemsByName('StartDate');
var DueDateDataField = DataFields.ItemsByName('DueDate');
var OwnerIDDataField = DataFields.ItemsByName('OwnerID');
Dataset.Locate('ID', Event.ID);
var PriorStartDate = StartDateDataField.ValAsDateTime;
var PriorDueDate = DueDateDataField.ValAsDateTime;
if (!CheckTaskCovering(Dataset, OwnerIDDataField, Event.Start,
Event.Finish)) {
CancelChangeEvent(Event, PriorStartDate, PriorDueDate);
return;
}
Dataset.Edit();
strong>var RemindingToOwnerID = Dataset.Values('RemindingToOwnerID');
if (!IsEmptyValue(RemindingToOwnerID)) {
var uq_Remindings = GetSingleItemByCode('uq_Remindings', 'uq_RemindSingle');
var Parameters = uq_Remindings.Parameters;
var ColumnsValues = uq_Remindings.ColumnsValues;
SetParameterValue(Parameters, 'ID', RemindingToOwnerID);
ColumnsValues.ItemsByName('RemindTime').Value = Event.Start;
uq_Remindings.Execute();
}strong>
//Dataset.ValAsStr('Title') = Event.Caption;
StartDateDataField.ValAsDateTime = Event.Start;
DueDateDataField.ValAsDateTime = Event.Finish;
UpdateDuration(Dataset);
Dataset.Post();
UpdateEventColorsByDatasetRecord(Event, Dataset);

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

Желаю удачи!

С уважением,
Мельникова Екатерина

Поделиться

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

Здравствуйте! Пробовал использовать этот код, но ничего не получилось, выходят ошибки... и в конце концов в приложении в разделе расписание задачи вообще не отображаються,
может ли это быть связано с тем что у меня версия 3,3,1,а код для другой версии, пожалуйста поясните для какой версии подходит данный код?

"Мамажанов Марат Кадралдыкович" написал:но ничего не получилось, выходят ошибки

Опишите, пожалуйста, ошибки которые у Вас возникают.
Заметил что в коде остались лишние теги (не удалось выделить текст), должно быть так:

var DataFields = Dataset.DataFields;
var StartDateDataField = DataFields.ItemsByName('StartDate');
var DueDateDataField = DataFields.ItemsByName('DueDate');
var OwnerIDDataField = DataFields.ItemsByName('OwnerID');
Dataset.Locate('ID', Event.ID);
var PriorStartDate = StartDateDataField.ValAsDateTime;
var PriorDueDate = DueDateDataField.ValAsDateTime;
if (!CheckTaskCovering(Dataset,OwnerIDDataField,Event.Start,Event.Finish)) {
    CancelChangeEvent(Event, PriorStartDate, PriorDueDate);
    return;
}
Dataset.Edit();
var RemindingToOwnerID = Dataset.Values('RemindingToOwnerID');
if (!IsEmptyValue(RemindingToOwnerID)) {
    var uq_Remindings = GetSingleItemByCode('uq_Remindings', 'uq_RemindSingle');
    var Parameters = uq_Remindings.Parameters;
    var ColumnsValues = uq_Remindings.ColumnsValues;
    SetParameterValue(Parameters, 'ID', RemindingToOwnerID);
    ColumnsValues.ItemsByName('RemindTime').Value = Event.Start;
    uq_Remindings.Execute();
}
StartDateDataField.ValAsDateTime = Event.Start;
DueDateDataField.ValAsDateTime = Event.Finish;
UpdateDuration(Dataset);
Dataset.Post();
UpdateEventColorsByDatasetRecord(Event, Dataset);

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

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

ColumnsValues.ItemsByName('RemindTime').Value = Event.Start;

на следующий:
- найти разницу между StartDateDataField.ValAsDateTime и Event.Start;
- найти запись из таблицы tbl_Remanding, значение поля RemindTime;
- добавить к нему разницу м/д StartDateDataField.ValAsDateTime и Event.Start;
- обновить запись в таблице tbl_Remanding.

Здравствуйте!
Подскажите пожалуйста как фильтровать, у меня есть 2 датасета (задачи и напоминания) и мне нужно, по мере изменения расписания задачи изменять и время напоминания, так чтобы время напоминания изменялось на столько же насколько изменяется расписание,
я было написал определенный скрипт, но когда я пытаюсь записать данные в таблицу напоминаний, у меня выходит ошибка, что поле "описание" не заполнено, и значение "нуль" в нем, не допустимо, вот пример:

function UpdateDatasetRecordByEvent(Dataset, Event) {

var DataFields = Dataset.DataFields;
var StartDateDataField = DataFields.ItemsByName('StartDate');
var DueDateDataField = DataFields.ItemsByName('DueDate');
var OwnerIDDataField = DataFields.ItemsByName('OwnerID');
Dataset.Locate('ID', Event.ID);
var PriorStartDate = StartDateDataField.ValAsDateTime;
var PriorDueDate = DueDateDataField.ValAsDateTime;
if (!CheckTaskCovering(Dataset,OwnerIDDataField,Event.Start,Event.Finish)) {
CancelChangeEvent(Event, PriorStartDate, PriorDueDate);
return;
}

Dataset.Edit();
var RemindingToOwnerID = Dataset.Values('RemindingToOwnerID');
var uq_Remindings = GetSingleItemByCode('uq_Remindings', 'uq_RemindSingle');
var ds_Remindings = dl_remLNK.dataset;
var Parameters = uq_Remindings.Parameters;
var ColumnsValues = uq_Remindings.ColumnsValues;
var ds_rem = ds_Remindings.DataFields.ItemsByName('RemindTime');
SetParameterValue(Parameters, 'ID', RemindingToOwnerID);
Event.Start;
uq_Remindings.Execute();

ds_Remindings.Close();
ApplyDatasetFilter(ds_Remindings, ID',RemindingToOwnerID, true);
ds_Remindings.Open();
ds_Remindings.edit();
ds_rem.ValAsDateTime = Event.Start;
ds_Remindings.post();

StartDateDataField.ValAsDateTime = Event.Start;
DueDateDataField.ValAsDateTime = Event.Finish;
UpdateDuration(Dataset);
Dataset.Post();
UpdateEventColorsByDatasetRecord(Event, Dataset);
}
я хотел фильтровать ds_Remindings.id по полю RemindingToOwnerID из первого датасета (ds_Task.RemindingToOwnerID), чтобы изменть напоминание связанное с текущим ответственным.
буду рад любым ответам

чем отличаются ds_Reminding и ds_Remindings какова роль каждого?

"Мамажанов Марат Кадралдыкович" написал:чем отличаются ds_Reminding и ds_Remindings какова роль каждого?

ds_Remindings соответствует всплывающему окну напоминаний. Вы можете посмотреть в соответствующем запросе на выборку sq_Remindings связи с таблицами, по записям которых появляются напоминания в этом окне.
ds_Reminding соответствует закладке "Напоминания" менеджера деталей.

Что касается Вашего кода, то проблема в не совсем корректном обновлении записей в таблице напоминаний. Например, нигде не указаны параметры для UpdateQuery.
Для решения проблемы рекомендую сделать следующим образом.
Сначала отфильтровать датасет напоминаний по нужной записи:

ds_Remindings.Close();
ApplyDatasetIDFilter(ds_Remindings, RemindingToOwnerID, true);
ds_Remindings.Open();

Затем записать в переменную описание напоминания (т.к. оно обязательно должно быть в UpdateQuery):

var RemindingDescription = ds_Remindings.Description;
if (IsEmptyValue(RemindingDescription)) {
                RemindingDescription = ‘Напоминание по задаче ’ + Dataset.Values(‘Title’);
}

Затем инициализация колонок UpdateQuery:

ColumnsValues.ItemsByName(‘Description’).Value = RemindingDescription;
ColumnsValues.ItemsByName(‘RemindTime’).Value = Event.Start;

Все это можно вставить между строками:

var ds_rem = ds_Remindings.DataFields.ItemsByName('RemindTime'); и SetParameterValue(Parameters, 'ID', RemindingToOwnerID);

Что касается блока:

ds_Remindings.Close();
ApplyDatasetFilter(ds_Remindings, ID',RemindingToOwnerID, true);
ds_Remindings.Open();
ds_Remindings.edit();
ds_rem.ValAsDateTime = Event.Start;
ds_Remindings.post();

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

Желаю удачи!

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