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

Нравится

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

Описание сохраняет ядро... 2-мя способами:

1. при нажатии на кнопку "сохранить"
2. при закрытии датасета с описанием

Пользователь Б не видит описания если пользователь А нажал на дискетку?

пс: http://www.community.terrasoft.ru/forum/topic/6790

Спасибо за помощь

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

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

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

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

Нравится

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

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

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

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

Нравится

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

Антон, а зачем Вам это?

Если надо по-разному реализовать права доступа, то нет смысла создавать разные детали. Если у Вас два разных поля Описание - тогда это не одинаковые детали.

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

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

Зіткнувся з проблемою: при використанні властивості контрола IsEnabled для блокування змін в деталі "Опис" блокується прокрутка. Неможливо переглянути весь текст. (
Підскажіть, може хто знає, як заблокувати зміни в цій деталі іншим способом.

Нравится

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

Добрый день, Юрий. Может помочь динамическая установка IsReadOnly для поля данных Description набора данных ds_Description в окне wnd_Description (это окно используется в качестве окна детали Описание).

Доброго дня, Дмитрію. Для цієї деталі я використовую окремо створений датасет. Нажаль, галочка "Только для чтения" ніякого впливу не дала. (

Моя помилка була в тому, що я використовував загальний скрипт wnd_DescriptionScript.
Створив окремий скрипт для обробки деталі, під'єднав scr_WindowUtils.
Вимкнув всі обробники подій окрім OnDatasetBeforeOpen для dlData
Із загального взяв:

//-----------------------------------------------------------------------------
// wnd_DescriptionExtScript
//-----------------------------------------------------------------------------
 
function SetRichControlDataField(DataFieldName) {
	if (DataFieldName != rdcDescription.DataFieldName) {
		rdcDescription.DataFieldName = DataFieldName;	
	}
}
 
function DoBeforeOpen(Dataset) {
    var Dataset = dlData.Dataset;
    var CanRead = false;
	if (Assigned(Dataset)) {
    	CanRead = GetCanReadTableGroup(Dataset)
	}
	if (!CanRead) {
		SetRichControlDataField('');
	}	else {
		SetRichControlDataField('Description');	
	}
}
 
// ----------------------------------------------------------------------------
// Event handlers
// ----------------------------------------------------------------------------
 
function dlDataOnDatasetBeforeOpen(Dataset) {
	DoBeforeOpen(Dataset);
}

Після цього опція "Только для чтения" в налаштуваннях датасету запрацювала.
Елементи редагування заморожені і прокрутка працює. Все як треба :)
Дякую, Дмитрію. Напрямок був вірний.

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

Раздел - [Клиенты]
Таблица - tbl_Customer
Главное окно раздела - wnd_CustomersWorkspace
Cкрипт - wnd_CustomersWorkspaceScript

Для создания детали "Описание" в разделе, необходимо выполнить следующие шаги:

1. Создать поле [Description] в таблице tbl_Customer типа BLOB (Большой бинарный обьект)

2. В окне раздела в компоненте pcDetails создать компонент [Page] c именем [pgDescriptionDetail]
В атрибуте [Caption] указать [Описание]

3. В компоненте [pgDescriptionDetail] создать компонент [WindowContainer] с именем [wndDescriptionDetail]
В атрибуте [Window] указать [wnd_Description]
Установить свойство [AlignHorizontal] в значение [alhClient]
Установить свойство [AlignVertical] в значение [alvClient]

4. В функцию RefreshDetails скрипта добавить строки:
else
if (pcDetails.ActivePage.Name == pgDescriptionDetail.Name) {
RefreshDescriptionDetail(BaseWorkspace, wndDescriptionDetail,
BaseWorkspace.GridDataset);
}
5. Сохранить изменения

Нравится

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

Для создания детали "Доступ" в разделе, необходимо выполнить следующие шаги:

1. Указать для таблицы раздела tbl_Customer опцию "Администрируется по записям", сохранить изменения, - создастся таблица [tbl_CustomerRight]

2. В окне раздела в компоненте pcDetails создать компонент [Page] c именем [pgAccessDetail]
В атрибуте [Caption] указать [Доступ]

3. В компоненте [pgAccessDetail] создать компонент [WindowContainer] с именем [wndAccessDetail]
В атрибуте [Window] указать [wnd_AccessGridArea]
Установить свойство [AlignHorizontal] в значение [alhClient]
Установить свойство [AlignVertical] в значение [alvClient]

4. В функцию RefreshDetails скрипта добавить строки:
else
if (pcDetails.ActivePage.Name == pgAccessDetail.Name) {
RefreshAccessDetail(BaseWorkspace, wndAccessDetail, 'tbl_CustomerRight');
}
5. Сохранить изменения

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

Можно сказать, что материал будет полезен тем, кто в силу разных причин работает с версией 3.0.х и 3.1.х. А с появлением мастера создания и редактирования разделов (wnd_CreateNewWorkspace) жизнь разработчика стала разнообразнее, поскольку теперь больше времени уделяется сложным нестандартным задачам.

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

Сейчас пытаюсь создать деталь, аналогичную стандартной детали «Описание», и столкнулся вот с какой проблемой: компонент RichDataControl не реагирует на действия пользователя — такое впечатление, что он неактивен, хотя свойство IsEnabled установлено в True.

Для детали я создал отдельную таблицу, SelectQuery, DataSet, окно и скрипт; затем в раздел «Контакты» добавил Page, на нем WindowContainer где в свойстве window прописал название своего окна (как, в общем-то и описано в первом сообщении в этой теме), отредактировал функцию RefreshDetails в скрипте, и на этом, собственно, все и закончилось :)

Коллеги, кто-нибудь сталкивался с такой проблемой?
Версия программы — 3.0.1.

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

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

Инна Безверхняя,
II линия службы поддержки Terrasoft.

Инна, спасибо за ответ.
К сожалению, предложенные Вами действия эффекта не возымели — RichDataControl все так же игнорирует мои попытки хоть что-то в нем написать :)

Что еще более интересно — даже если я создаю точную копию детали «Описание», я получаю ту же саму проблему.

Здравствуйте, Андрей.
Напишите пожалуйста письмо с описанием данной проблемы на support@tscrm.com и мы постараемся решить ее в индивидуальном порядке.

Инна Безверхняя,
II линия службы поддержки Terrasoft.

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

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

Забыла подключить scr_WindowUtils в скрипте окна, теперь все работает =)

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

Часто задают вопрос о работе с данными детали "Описание" без визуального компонента. Особенно часто получаю вопрос о переносе строки. И вот решил осветить немного эту тематику.
В детали "Описание" текст представлен в формате RTF и в базу данных он ложится именно в таком виде. А значит, если есть задача видоизменить текст, то нужно понимать, что работа ведется именно с текстом RTF-документа.
А теперь по поводу переноса строки.
Разрыв строки добавляется очень просто. Если не углубляться в дебри описания структуры RTF-документа, то некоторую информацию можно получить, если включить отладку и посмотреть значение поля Description в датасете. Там видно какие управляющие символы используются в том или ином случае. В частности, по переносу строки. Учитывая вышеизложенное, выполним слеюдующее:

1. Добавляем текст в визуальный компонент обычным способом. Я добавил такой текст:
aaa1
bbb1
ccc1
ddd1

2. Включив отладку в детали «Описание», получил следующее значение поля Description:

{\rtf1\ansi\ansicpg0\uc1\deff0\deflang0\deflangfe0{\fonttbl{\f0\fnil Arial;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}

\uc1
\pard\fi0\li0\ql\ri0\sb0\sa0\itap0 \plain \f0\fs20 aaa1
\par bbb1
\par ccc1
\par ddd1\par}

Анализируя текст, несложно заметить:
а. В начале заголовок RTF-документа, он нас сейчас не интересует.
б. Дальше идут инструкции по формату текста, тоже сейчас не нужны.
в. А вот где начинается введенный мною текст, можно увидеть инструкцию \par – это и есть перенос строки. Нужно еще обратить внимание, что инструкция отделяется от текста пробелом, а в конце документа обязательно стоит завершающая фигурная скобка.

Информацию по остальным инструкциям можно поискать в описании формата или методом «научного тыка» через отладку.

Нравится

Поделиться

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

Конечно метод "научного тыка" это хорошо. Но как показывает практика - компонент используемый в Террасофт для отображения детали "Описание" поддерживает далеко не все инструкции стандарта rtf.
Полезная ссылка - некоторые инструкции rtf, язык русский.
http://articles.org.ru/docum/rtf.php

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