Копирование задачи, своя обработка. Помогите разобраться.

Есть необходимость при копировании задачи (по кнопке) некоторые поля сохранять, некоторые устанавливать в дефолтовые (как при создании задачи), а некоторые - в определенные значения.
Для этого в обработке был написан свой код. НО, есть следующие проблемы:
1. После установки Даты начала и Даты завершения через BaseGridArea.AddDataDefaultValues при последующем (например) создании новой задачи эти поля устанавливаются как в копируемой ранее задаче. Подскажите, как их можно очищать или каким другим способом устанавливать.
/*при добавлении этих полей в атрибуты в окне карточки задачи остаются старые даты...*/
2. Еще проблема с напоминаниями. Если в копируемой задаче выбрано Напоминание ответсвенному (дата задана), то при копировании в объекте BaseGridArea.AddDataDefaultValues.Item('RemindToOwnerDate') свойства Value не определено, а ValIsNull = true. Хотя для объекта BaseGridArea.AddDataDefaultValues.Item('RemindToAuthorDate') все данные отображаются, если выбрано Напоминание автору. /*смотрю в отладчике*/.
Подскажите, с чем это связано и по какому полю можно отследить выбрано напоминание или нет, чтоб установить новую дату.

тескт функции прикреплен.

Заранее, спасибо.

Нравится

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

Надежда, добрый день.

Попробуйте вместо BaseGridArea.AddDataDefaultValues использовать GetNewDictionary():

var DefVal = GetNewDictionary();

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Спасибо, первая проблема разрешилась.
Осталась втроя...

Вторая проблема возникает потому, что в реестр задач не вытянута колонка "Дата напоминания ответственному", зато вытянута "Дата напоминания автору". Поскольку колонка не активна, программа считает, что её значение пустое.

Для устранения проблемы используйте вместо

!BaseGridArea.GridDataset.DataFields.ItemsByName('RemindToOwnerDate').ValIsNull

проверку

!IsEmptyDateTime(GetFieldValueFromDisabledField(BaseGridArea.GridDataset, 'RemindToOwnerDate'))

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Возникает ошибка, если напоминание не установлено, при проверке говорится, что поле null или не определено...
Я уже пробывала проверять BaseGridArea.GridDataset.DataFields.ItemsByName('RemindToOwnerDate').Value - заполнено или нет, в этом случае возникала ошибка, что поле заблокировано (если оно пустое).

Надежда, Вы проверяете, как я Вам рекомендовал выше? С помощью функции GetFieldValueFromDisabledField(BaseGridArea.GridDataset, 'RemindToOwnerDate')?

Полностью эта часть кода выглядит так:

if (!IsEmptyDateTime(GetFieldValueFromDisabledField(BaseGridArea.GridDataset, 'RemindToOwnerDate'))) {
		DefVal.Item('RemindToOwnerDate') = NewStDate.getVarDate(); }
if (!IsEmptyDateTime(GetFieldValueFromDisabledField(BaseGridArea.GridDataset, 'RemindToAuthorDate'))) {
		DefVal.Item('RemindToAuthorDate') = NewStDate.getVarDate(); }
ShowEditWindowEx(BaseGridArea.EditWindowUSI, Attributes, DefVal);

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Олег, да, я пишу именно так. При выполнении возникает ошибка "Ожидается наличие объекта" в ф-ции IsEmptyDateTime.
Если ей передать new Date(GetFieldValueFromDisabledField(BaseGridArea.GridDataset, 'RemindToOwnerDate')), то ошибки нет, но проверка некорректной получается...

Попробуйте вместо IsEmptyDateTime использовать IsEmptyValue.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Да, точно, спасибо.
Тогда проверка будет выглядеть так:

if (!IsEmptyValue(GetFieldValueFromDisabledField(BaseGridArea.GridDataset, 'RemindToOwnerDate'))) {
DefVal.Item('RemindToOwnerDate') = NewStDate.getVarDate(); }
if (!IsEmptyValue(GetFieldValueFromDisabledField(BaseGridArea.GridDataset, 'RemindToAuthorDate'))) {
DefVal.Item('RemindToAuthorDate') = NewStDate.getVarDate(); }
ShowEditWindowEx(BaseGridArea.EditWindowUSI, Attributes, DefVal);

Совершенно верно :).

Проблема решилась?

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Да, еще раз спасибо.
Теперь все работает.

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