Иногда не сохраняется контент из детали Описание

Уже не раз сталкиваюсь с тем, что содержимое вкладки Описание не сохраняется, даже после нажатия на кнопку Сохранить! Причем узнаешь это только когда данные пропали.

Не описать как это вымораживает, когда теряется и труд и время.

- как отловить этот глюк?
- как узнать текущую вверсию клиента ТС?

Нравится

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

Добрый день!

"Отловить" можно только выявив порядок действий, после которых не сохраняются данные.
Вариант решения - обновление до самой последней сборки в рамках Вашей версии, которая написана в коне запуска программы (например, 3.3.2.127).

Столкнулись с такой же проблемой в версии 3.3.0.83. Возникает только на детали [Описание] раздела [Проекты].

Добрый день!

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

Да, отловить такую последовательность будет тяжеловато. А вот если не нажимать кнопку Сохранить, то и в разделе Счета и в разделе Документы в детали Описание данные то сохраняются, то не сохраняются. С чем это связано? Как лечить - понятно - нажимать Сохранить, а вот почему такая нестабильность?

Скажу больше, иногда (но редко) инфа не сохраняется и после нажатия на кнопке Сохранить!

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

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

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

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

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

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

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

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

Какую версию Вы используете?
Дело в том, что при переходе в другой раздел или даже если закрыть приложение, текст на детали описание сохраняется - проверял на 3.4.0.121.

Как вариант: можно попробовать самостоятельно переопределить логику сохранения данных детали. Для этого вызывайте метод rdcDesciption.SaveToDataset();

Еще раз перепроверил - не сохраняется в моей версии: 3.3.2.266, БД Оракл, сервисы от 3.1.Х.Х

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

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

Проверил на 3.3.2 - Вы правы.
Для исправления этой проблемы Вам необходимо:

1. В Террасофт Администратор в скрипте scr_BaseWorkspace в функции wnd_BaseWorkspaceOnProfileSerialize(Window, Node) добавить вызов функции SaveDescription();

function wnd_BaseWorkspaceOnProfileSerialize(Window, Node) {
	Node.SetAttributeAsStr('SavedGroupID', dlGroups.Dataset('ID'), '');
	SaveDescription();
}

2. В этом же скрипте объявите эту функцию:

function SaveDescription() {
	var DescriptionDetail = Self.ComponentsByName('wndDescriptionDetail');
	if (DescriptionDetail) {
		var DataseLink = DescriptionDetail.Window.ComponentsByName('dlData');
		if (DataseLink.Dataset.IsActive) {
		        DataseLink.Dataset.Close();
		}
	}
}

Сохраните изменения и перезапустите клиентское приложение.

Дмитрий, спасибо большое. Ваш код действительно помог. Только у меня функции wnd_BaseWorkspaceOnProfileSerialize(Window, Node) вообще не было в данном скрипте, пришлось создать её и привязать на событие OnProfileSerialize окна wnd_BaseWorkspace.

Подскажите, пожалуйста, нужна ли мне строка кода Node.SetAttributeAsStr('SavedGroupID', dlGroups.Dataset('ID'), ''); если упоминания о SavedGroupID в коде нет и для чего она должна служить?

Судя по всему, она сохраняет позицию в дереве групп при закрытии раздела. А при открытии, соответственно, можно восстанавливать. Если такая логика нужна, можно перенести и её.

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

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

Всем спасибо, реализовал у себя подобную полезную функцию.

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