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

Ситуация такая. В процессе работы над crm в разделе Проекты была одна колонка и бизнес-правило к ней: поле Статус недоступно для редактирования, пока значение в той колонке(поле с дробным числом) равно 0.
Позже это бизнес-правило удалилось из-за ненадобности. И после этого начала появляться ошибка:
23502: null value in column "ITdsMarzha2" violates not-null constraint

ITdsMarzha2 - это и есть та колонка.
Её мы и удаляли в базе данных postgre, и чистили схему страницы от неё, и почистил все бизнес-правила в мастере раздела и в схеме страницы (думал там мог след остаться от удаленных б-правил). Постоянно кучу раз делал полную проверку системы: обновление бд, генерация, компиляция. Ну вот нигде её след больше не можем найти.

И всё равно ошибка появляется при сохранении карточки. При чем карточка то сохраняется успешно, а вот всякие связанные с этим бизнес-процессы не запускаются.
Кстати проблема только на боевой продуктивной среде. На моей локальной разработческой ошибки не возникает.

Может подсказать кто, куда нам ещё нужно залезть проверить эту "несуществующую" колонку?

Нравится

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

Добрый день. Ошибка приходит из постгре - там явно подразумевается, что колонка существует, и что в записи она будет заполнена значением. Вы точно уверены, что в схеме объекта не осталось этой колонки? Из базы может и удалили, но ОРМка может создать колонку обратно, основываясь на метаданных объекта.

Vyacheslav Lipatkin,

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

Андрей Касаткин,

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

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

Добрый день.

У меня есть деталь с редактируемым реестром, в реестре выведено 3 колонки:

1) колонка-справочник: выбирается запись из раздела Контакт

2) колонка-справочник: выбирается вручную из созданного справочника

3) текстовое поле, заблокировано: в данное поле должно подставляться значение из определенной колонки (UsrColumn1) из карточки Контакта

Подскажите, как мне автоматически подтянуть информацию в 3 колонку, при выборе значения в 1 колонке?

Нравится

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

Здравствуйте, для РР работают подписки на события, следовательно на странице карточки детали (да хоть она уже и не отображается, часть логики с нее работает, а именно подписки, некоторые методы и бизнес-правила) необходимо доработать атрибуты одноименные нужным вам колонкам, в зависимостях указать при изменении каких колонок тригерить метод, и имя самого метода, а в методе уже через esq читать данные первой колонки, и писать их в 3ю, как-то так:

 

"UsrColumn3": {
	"dependencies": [
		{
			"columns": ["UsrColumn1"],
			"methodName": "onChange1Column"
		}
	]
},
 
....
 
onChange1Column: function() {
	// читаем нужные данные через esq из первой this.get("UsrColumn1") колонки
	и устанавливаем их в 3ю this.set("UsrColumn3", data);
},

 

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

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

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

Нравится

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

В Terrasoft 3.Х нет механизма EntitySchemaManager. Там всё устроено иначе.

"Зверев Александр" написал:

В Terrasoft 3.Х нет механизма EntitySchemaManager. Там всё устроено иначе.


Понял. Спасибо.

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

Не подскажете ли решение одной проблемы – как определить положение колонки грида? Смотрел ее свойства – свойства Left нет. Есть ширина, но OrderPosition 0 у всех (может оно где-то на последнем этапе появляется). Если бы можно было пройтись по колонкам от первой до интересующей, то можно было бы вычислить положение. Как определить координаты элементов?

Нравится

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

Добрый день.
Настройка положения колонок "вытаскивается" из закешированного содержимого. Базовые функции. работающие с кешем представлены в Common\Library\scr_WindowUtils: WinCache_Get, WinCache_CheckExtent() и т.д. Примеры их использования можно найти в конфигурации.

Если окно еще ни разу не открывалось - ядро обращается непосредственно к XML содержимому сервиса окна, и по мере получения Item'ов формирует обект окна. При необходимости уточним у разработчиков, учитывается ли OrderPosition, и реализуема ли Ваша задача. Уточните также, в свою очередь, какие бинарные файлы используете Вы (их версию).

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

Цикл:

var j = 0;
var ActiveView = DataGrid.ActiveView;
for (var i = 0; i < DataGrid.ActiveView.Count; i++) {
var DataField = ActiveView.Items(i);
if (!DataField.IsEnabled) {
continue;
}
//Это поле, DataField стоит под номером j. Дальше что хотите, то и делаете
j++;
}

Даже если кто-то испортил порядок вручную, то запустив эту функцию еще раз мы все-равно определим положение

Спасибо, работает. Не поскажете еще как программно менять порядок следования элементов внутри фреймгруп. Например внутри FrameGroup5 находятся (fgOffering1, fgOffering2, fgOffering3, fgOffering4) Хотелось бы изменить порядок следования - (fgOffering4, fgOffering2, fgOffering1, fgOffering3)

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

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

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

Пользователь выполнил настройку колонок реестра, но после перезагрузки Terrasoft вид реестра остался таким как до настройки. Можно ли сохранить настройку колонок?

Нравится

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

Скорее всего свойство UseProfile окна в котором выпаолняли настройку колонок false, а нужно true.

Спасибо!
Так и вышло.

А на окно, которое отображается посредством элемента управления WindowContainer это распространяется?

Добрый день,

Окно в контейнере имеет собственную настройку, значение которой необходимо задать отдельно.

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

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

var Column = Self.CreateComponent('DataGridColumn', 'colProcessed');
grdData.ActiveView.Add(Column);
grdData.ActiveView.ItemsByName('colProcessed').DataFieldName = 'Processed';

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

var ColumnObject = grdData.ActiveView.ItemsByName('colProcessed');
grdData.ActiveView.RemoveItem(ColumnObject);

Нравится

Поделиться

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

Существует ли возможность выровнять значения внутри отдельной колонки Grid-а (по центру, по левому краю)?

Нравится

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

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

В версии 3.4 это все ещё в силе? Изменений не предвидится?

Доброе утро, Антон.
К сожалению в ближайшее время внедрение такой опции не запланировано в возможности 3.4.

Ок. Спасибо, Павел.

Не выравниваются текстовые клонки по левому краю. Может быть при просмотре только. При редактировании они как числа смещаются к правому краю, оно никому не нужно

 

Лабьяк Олег Игоревич пишет:

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

Собственно по сабжу. Как это можно сделать, на удаляя и не скрывая колонку из реестра? И можно ли вообще?

Нравится

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

Боюсь что нет, нельзя напечатать избирательно... (если это заблуждение, буду рад узнать о такой возможности от завсегдатаев комьюнити:smile:) Как вариант - сделайте простой отчет, не включающий в себя эту колонку и запретите печать в данном реестре...

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

получается это единственный выход... тогда оформлю идею
______________
www.abs.com.kz
Агентство недвижимости АБС Royal Estate

"Биккинин Т.Р." написал:

получается это единственный выход... тогда оформлю идею


Жаль ссылки на идею нет :sad:

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

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

1.    В обработчике события OnPrepare окна реестра скрыть необходимую колонку.
Колонку нужно скрыть во всех представления (DataGridView) компонента реестра (DataGrid) в окне.
Выяснив, что выполняется условие для скрытия колонки, нужно определить количество представлений реестра:
   

 var GridViewCount = DataGridName.Count;

Затем, в цикле в каждом из представлений перебирать колонки и в случае, если колонка отображает искомое поле, скрывать ее:

for (var i = 0; i GridViewCount; i++) { // цикл по представлениям реестра
 var DataGridView = grdData.Items(i);
 if (DataGridView.Items(0)) {
  var GridFieldCount = DataGridView.Count; // количество колонок в представлении
  for (var k = 0; k GridFieldCount; k++) { // цикл по колонкам
   var Column = DataGridView.Items(k);
   if (Column.DataField) { // проверка того, что колонка отображает поле из набора данных
    if (Column.DataField.Name == FieldName) { // проверка того, что поле, отображаемое в колонке, - искомое
     DataGridView.RemoveItem(Column); // удалить колонку из представления
     Self.RemoveComponent(Column); // удалить колонку из окна реестра
     break;
    }
   }
  }
 }
}

2. Запретить возможность фильтрации реестра по скрываемому полю

Dataset.DataFields(FieldName).IsFilteringField = false;

3. Скрыть поле ввода в карточке редактирования реестра.
Для этого, в обработчике события OnPrepare окна карточки редактирования реестра соответствующему компоненту установить свойство IsVisible = false.

Нравится

Поделиться

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

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

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

Думаю, что права доступа и производительность - основные недостатки такого решения...

--
www.it-sfera.com.ua

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