Ответили в рамках поддержки, но может кому-то еще понадобится.
Данная задача может быть выполнена следующим образом:
0) Перйдите в конфигурацию
1) Добавьте поле в объект "Страна" (поле с типом строка). Вы можете добавить это поле, заместив объект "Страна"
2) Добавьте схему с типом "Замещающая страница". Схему с типом "Замещающая страница" Вы можете найти в расширенном представлении кнопки "Добавить"
3) Выберите в качестве родительской страницы страницу "Страница редактирования страны"
4) В MainContolLayout Вам необходимо добавить элемент "Текстовое поле" (выделите MainContolLayout и нажмите правой кнопкой мышки, чтобы открыть доступные варианты)
5) Выделите добавленное поле в структуре и переместите его на нужное место (обычное перетаскивание мыши)
6) В свойствах этого поля укажите "Источник данных" - DataSource, Колонка данных - созданная на первом шаге колонка объекта "Страна".
7) Сохраните и опубликуйте страницу.
В результате новое поле будет добавлено на страницу редактирования справочника "Страна".
Добрый день! Потребовалось добавить поле "Код" в таблицу единиц измерения. Добавление самого поля не составило проблем, добавил его в таблицу, в sq_ запрос и в ds_ выборку. Но есть проблема по добавлению текстового поля в справочник. В администраторе я не нашёл wnd_ объект, который отображается для единицы измерения. В клиентской части, когда я захожу в Справочники->Настройки для пункта "Единицы измерения" не указано окна редактирования. Указан только источник данных. Как я понял, если отсутствует значение у окна редактирования, то поля должны как-то сами подтягиватся. Почему тогда код не появился?
Если окно не указано, то используется стандартное окно редактирования из двух полей - Name и Description.
Сделайте свое окно редактирования (в качестве TemplateWindowUSI = wnd_BaseDBEdit) и укажите его в настройках справочника.
А где вложенный файл?
Вытянуть колонку в реестр можно, нажав на кнопку [+] в правом верхнем углу реестра и выбрав нужную колонку.
Это только для текущего пользователя, если надо для всех — настраивается иначе.
Запустить программу TSAdmin (Администратор Terrasoft).
Открыть в ней сервис wnd_AccountsGridArea (выбрать в дереве справа «Accounts\General\Main Grid\wnd_AccountsGridArea»). Откроется дизайнер окна реестра контрагентов.
В дизайнере в дереве слева выбрать элемент gvAll (все контрагенты). Нажать на нём правой кнопкой мыши и выбрать «Определить колонки». Откроется список колонок.
Найти колонку CategoryID (или как там она у Вас называется), поставить ей галочку возле названия и галочку «Видимая» внизу окошка.
Нажать «ОК», затем сохранить изменения в сервисе, нажав на иконку с дискетой.
Здраствуйте. Зачем такие усложенения. Человеку нужно чтоб в нужном поле после загрузки страницы в нужном поле установился фокус. Та и в вашем методе нужно к тому же подключать внешнюю библиотеку JQuery. Для такой простенькой задачки подключать внешнюю библиотеку, когда это можно сделать "чистым" Javascript, как по мне нецелесообразно
Не после загрузки страницы а после отображения inputBox и в единственном поле. Библиотека JQuery у меня уже была подключена для других целей. Можно сделать и на чистом Javascript тут как-раз разницы никакой.
Стоит задача: Есть задача (активность в bpm), нужно послать письмо ответственному и автору какие поля были изменены. С отправлением письма разберусь, а как в bpm5 получить список всех полей сущности, и как по названию поля получить его заголовок. Думаю понятно объясню в коде
Entity CurrentEntity =this.Entity;//Текущая запись - задача string[] arFieldsNames =;//как получить в массив строк полей по сущности? string[] arFieldsTitles =;//как получить массив заголовков полей либо ниже, как по названию поля, получить его заголовок?
var emailBody ="Измененные значения:
";//тело для письма for(var i=0;iarFieldsNames.Length;i++){ //Сравниваем старое и новое значение if(CurrentEntity.GetColumnOldValue(arFieldsNames[i])!= CurrentEntity.GetColumnValue(arFieldsNames[i])){
var fieldTitle =;//как получить сроку "Ответственный" по строке "Owner" или "OwnerId"?
emailBody += fieldTitle +": "+ CurrentEntity.GetColumnDisplayValue()+"
";//Записываем в тело письма } }
Грубо говоря хотелось бы получить такое
Измененные значения:
Ответственный: Пользователь2
Состояние: В работе
Можно конечно тупо в массивы забить названия и заголовки полей Активности, но вдруг это понадобится для Документов, Продаж и т.д. Постоянно вбивать как-то не очень хочется, а хочется универсальности.
Здравствуйте!
Доступ к колонкам можно получить так:
var columns =this.Entity.Schema.Columns;//коллекция колонок//затем можно их перебрать
foreach (var column in columns){//своя логика//column.Caption - подпись колонки, например}
Если делать в БП, то можно получить схему из элемента "Чтение данных" так:
var schema = ReadDataUserTask1.ResultEntity.Schema;
В процессе администрирования базы данных возникла необходимость определить причину возникновения ошибки. Определенный объём информации импортируется в базу данных, с которым далее пользователи работают. В процессе заполнения определенного набора полей автоматически высчитывалась итоговая сумма в поле «Итого». Но в определённый промежуток времени использования продукта начали появляться ошибки, связанные с несоответствием значения поля «Итого» сумме полей из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Так как ошибку не получалось явно повторить, необходимо было разработать механизм для решения данной проблемы.
Естественно самой реальной и первой причиной возникновения такой ошибки приходила идея о сбоях в работе событий полей окна редактирования (то есть значения в полях изменялись, а события данных полей(-я) не срабатывали).
В основу решения было положено создание двух таблиц в базе данных для ведения логов, что происходят с записью набора данных. Первая таблица WindowLog, а вторая TriggerLog.
Первая таблица WindowLog включает в себя поля «Дата создания»(CreatedOn), «Идентификатор записи» (RecordID), «Ответственный» (WindowsUser), «Имя поля породившего событие»(FieldName), «Итого» и поля из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Для наполнения таблицы было использованы события невизуального компонента окна dlData: dlDataOnDatasetDataChange, dlDataOnDatasetBeforePost и dlDataOnDatasetAfterPost. В скрипте в событиях была создана функция, которая формировала SQL запрос к таблице WindowLog базы данных с фиксацией информации по указанным полям на момент срабатывания события.
Вторая таблица TriggerLog включает в себя поля «Дата создания»(CreatedOn), «Идентификатор записи» (RecordID), «Состояние» (до изменения записи и после), «SystemUser», «Итого» и поля из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Для заполнения данной таблицы был создан триггер на инструкцию UPDATE проблемной таблицы с двумя запросами вставки значений в таблицу. В одном запросе вставлялись значения до изменений, а во втором после.
Запрос №1:
INSERTINTO TriggerLog (*набор полей*) SELECT(*набор полей*) FROM deleted
Запрос №2:
INSERTINTO TriggerLog (*набор полей*) SELECT(*набор полей*) FROM inserted
Результатом использования данного решения на основе анализа таблицы WindowLog было установлено, что срабатывают все события окна редактирования, влияющие на вычисление значения поля «Итого». В процессе использования окна редактирования и после сохранения записи значения поля «Итого» были корректны.
Проанализировав записи в таблице TriggerLog было установлено, что в результате выполнения инструкции UPDATE было внесено некорректное значение. Сопоставив даты создания записей в таблице TriggerLog и WindowLog было установлено, что инструкция UPDATE была вызвана не в результате манипуляций с окном редактирования, а иным источником. На основании поля «SystemUser» таблицы TriggerLog было установлено что изменения были внесены с помощью импортера данных.
Таблицу TriggerLog возможно расширить, добавив в нее поля, которые помогут ускорить процесс обнаружение источника изменений записи базы данных. Список дополнительных полей может выгладять следующим образом: ApplicationName, LoginName, HostName.
PS: Принимаю предложения на доработку вашей конфигурации!!! Для более детальной информации можно связаться по следующему e-mail адресу: providnui@ukr.net !!!
В случае возникновения дополнительных вопрос по теме могу поделиться более детальной информацией.
Добавила поле "признак" на карточку детали раздела. Хотелось бы, что бы, после того как поставила галочку на поле "признак" и нажала на кнопку "OK", невозможна было бы менять карточку. То есть убрать галочку с поля "признак". Не могли бы подсказать, как я могу, все это настроит?
Заранее Спосиба.
Я добавила на EditPage следующий скрипт.
if (Page.DepartmentConfirmEdit.Value)
{
Page.DepartmentConfirmEdit.Enabled = false;
}
else
{
Page.DepartmentConfirmEdit.Enabled = true;
}
#DepartmentConfirmEdit - Название поля#
Но во время компиляции выдает следующую ошибку.
Cannot implicitly convert type "object" to "bool". An explicit conversion exists (are you missing a cast?)
На карточку деталь добавила логическое поле "признак". Если возможна, хочу добавит следующую функцию. Если пользователь поставит галочку на это поле, в дальнейшем не смог его поменять (убрать галочку).
Компилятор говорит Вам, что не может неявно конвертировать значение с типом объект в булевский тип. Page.DepartmentConfirmEdit.Value - это объект, но во время проверки Вы обращаетесь к нему, как к булевому значению.
Попробуйте изменить условие на: if (Page.DepartmentConfirmEdit.Value == string.IsEmpty)
Но есть одна проблема. Когда я нажимаю кнопку "изменит", логическое поле "признак" опять становится активной. Что мне сделать что бы, даже при нажатии кнопки "изменит", это поле по-прежнему оставалось не активной.
Скорее всего, значение просто не сохраняется. Вы уверены, что создали колонку в объекте и связали ее с полем на карточке, что бы значение поля сохранялось?
Как изменить какое-либо поле сразу в нескольких карточках данных Terrasoft средствами Terrasoft без привлечения "взрослых" редакторов баз данных? Просто обычные пользователи устают менять вручную предположим поле Компания для карточек Контактов или поле Ответственный в карточках Контрагентов.
Плохи дела. Ну единственное только ответственного можно через скрипт http://www.community.terrasoft.ru/blogs/7948. А вот этих двух строчек нет: http://www.community.terrasoft.ru/blogs/7715
В общем в Террасофт нет возможности произвольно выделить сразу несколько контактов и контрагентов и применить изменение на одно из полей. Только вручную, карточка за карточкой... Жаль. В какой версии это появится? У нас 3.4.0.137
Не позже 3.4.0.54 уже появилось. Возможно, в 3.4.0.54 эти 2 строчки там всё же есть.
Попробуйте с правами админа выделить 2 записи и нажать "Изменить". Если массовое редактирование работает - можно и пользователям настроить.
Не работает ни у админа, ни у пользователей. Может можно как-то сыграть через импорт данных через "Интеграции" из таблицы XLS, где колонка имен контрагентов и нужных полей? Пробую, но получается пока вот так (http://paste.omsklug.com/1110/):
-----Импортируются данные из файла 'C:\Documents and Settings\Администратор\Мои документы\БД потенциальных клиентов - зубодолбёжная обработка.xls'
Вычитываются данные из листа 'Зубодолбежная обработка'
Импортируются данные из листа 'Зубодолбежная обработка'
Импортируются данные в таблицу 'Контрагент'
Импортируется запись Название = ООО "Ромашко"
***
***Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation
string right truncation
Incompatible column/host variable data type
Error Code: 249
UPDATE "tbl_Account"
SET "OwnerID" = :OwnerID,
"AktivID" = :AktivID,
"AccountTypeID" = :AccountTypeID,
"AddressTypeID" = :AddressTypeID,
"ClientLifeCyclePhaseID" = :ClientLifeCyclePhaseID,
"ModifiedOn" = CURRENT_TIMESTAMP,
"ModifiedByID" = '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}'
WHERE("tbl_Account"."ID" = :ID)
***
Импортируется запись Название = ООО "Петрушко"
***
***Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation
string right truncation
Incompatible column/host variable data type
Error Code: 249
INSERT INTO "tbl_Account" ("OwnerID", "AktivID", "AccountTypeID", "AddressTypeID", "ClientLifeCyclePhaseID", "Name", "ID", "CreatedOn", "CreatedByID", "ModifiedOn", "ModifiedByID")
VALUES (:OwnerID, :AktivID, :AccountTypeID, :AddressTypeID, :ClientLifeCyclePhaseID, :Name, :ID, CURRENT_TIMESTAMP, '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}', CURRENT_TIMESTAMP, '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}')
***
Импортируется запись Название = ОАО "Заварушко"
***
***Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation
string right truncation
Incompatible column/host variable data type
Error Code: 249
UPDATE "tbl_Account"
SET "OwnerID" = :OwnerID,
"AktivID" = :AktivID,
"AccountTypeID" = :AccountTypeID,
"AddressTypeID" = :AddressTypeID,
"ClientLifeCyclePhaseID" = :ClientLifeCyclePhaseID,
"ModifiedOn" = CURRENT_TIMESTAMP,
"ModifiedByID" = '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}'
WHERE("tbl_Account"."ID" = :ID)
***
Если конфигурация версии 3.4.0 (не бинарные файлы, а именно версия конфигурации) - должно присутствовать массовое изменение записей.
Что касается импорта, лога недостаточно, необходим для тестирования настроенный шаблон и сам файл Excel.
1. Где достать свежие релизы? Почему программа сама не обновляется? В Ubuntu Linux я просто пишу sudo apt-get upgrade и обновляю весь дистрибутив, а тут единственная программа обновится не может.
2. Ну а вообще здравая мысль менять массово данные через импорт (если нет другой возможности)?
"linuxmasterz" написал:1. Где достать свежие релизы? Почему программа сама не обновляется?
Новые версии бинарников может выслать поддержка.
Обновление тоже настроить можно. Складываете файлы в расшаренную папку, прописываете её в файле настроек. Все компьютеры с установленной системой при запуске обновятся.
"linuxmasterz" написал: менять массово данные через импорт (если нет другой возможности)
Мысль вполне приемлемая. Как минимум, хотя бы, по той причине, что можно отдать такую механическую работу на оутсорс или сотруднику комании но, к примеру, не пользователю системы, но способному с правиться с задачей заполнения/редактирования файла импорта.
linuxmasterz, в версии 3.4.0.137 Terrasoft XRM присутствует массовое изменение записей:
Функциональность реализована на уровне конфигурации, поэтому если Вы используете бинарные файлы версии 3.4.0, но версия конфигурации ниже - массового изменения записей не будет.
Добрый день! Помогите разобратся в одном отчёте. Писали его разработчики до меня, я пока что вникаю в суть. До поры до времени работало, а в один прекрасный день стала появлятся ошибка. Суть в том, что в одном поле есть такая строка:
Я понимаю смысл того, что строка должна выдавать, но не понимаю некоторых особенностей. Объясните, что обозначает пустое место после запятой в первом iif вот здесь:
[ds_CustomerAddress."ZIP"], >
и почему в етом же iif в разделе false написано просто " >" - ето пустая строка?
И почему в данном отчёте выдаётся ошибка
Unknown variable of datafield:
Unknown variable of datafield: [ds_CustomerAddress."CityName"]
Unknown variable of datafield: [ds_CustomerAddress."TerritoryName"]
, хотя ети поля имеются в подгружаемых данных. Более того, сам отчёт формируется правильно, все значения отображаются. Откуда тогда ошибке взятся?
Оператор "< >" в блоке false функции IIF означает пустой DataField, т.е. в отчет подставится пустое место.
По поводу пустого места после запятой, до конца не уверен, однако могу предположить, что у Вас в одном поле выводится совокупный адрес (индекс, страна, город, и пр.) соответственно такой конструкцией они выводятся через запятую с пробелом.
По поводу ошибки, к сожалению ничего конкретного сказать не могу. Возможно где-то в коде нужно заменить конструкцию [ds_CustomerAddress."TerritoryName"] на
Оказалось всё просто, хотя пришлось повозится. Вместо
<[ds_CustomerAddress."TerritoryName"], >
надо было написать
<ds_CustomerAddress."TerritoryName">+", "
А вместо
<>
" "
Уж не говоря о том, что в скрипте были ссылки на несуществующие выборки.
А работало до поры до времени наверняка из-за кеширования. Возможно, что у клиентов когда-то закешировался правильный вариант отчёта, на етом всё и держалось. Хотя, ето просто предположение. Спасибо за подсказку ;)