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

В запросе sq, для определенной колонки грида, создала SQL Text Column и использую scalar-valued sql function, которая возвращает имена через запятую. Тип возвращаемого значения sql функции - returns nvarchar(max). В sql редакторе ответ нормальный, а в террасофт - ??????,??????,???

Тип поля в датасете - строковое поле, кодировка - DEFAULT_CHARSET

Спасибо.

Нравится

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

Какая у Вас версия Terrasoft?

Может как-то можно преобразовать возвращаемое значение в теле sql функции, чтобы террасофт смог прочесть ?

Попробуйте явно указать Collation.

Павел, явно указала collation базы данных не помогло.
Нашла ссылку http://www.community.terrasoft.ru/forum/topic/14248,
здесь похожая проблема была, но и эта статья не помогла

Здравствуйте, Марина!

В статье, ссылку на которую Вы привели выше, рекомендуется обновление до версии не ниже 3.4.0.
Вы обновились до этой версии, а проблема всё также осталась?

В качестве решения проблемы попробуйте вместо колонки в Select Query добавить вычисляемую колонку в Dataset, на обработчик события OnDatasetCalcFields программного выполнять вызов вашей функции и устанавливать возвращаемое значение для вычисляемого поля.

К сожалению, невозможно обновить версию.

var CategoriesIDs = Dataset.Values('CategoryIDs');
var sSQL = " select dbo.fn_GetIncidentCategoriesNames('" + CategoriesIDs + "') ";
var array = GetSimpleSQLResult(sSQL);
Dataset.Values('CategoriesNames') = Trim(array[0]);

sSQL = " select dbo.fn_GetIncidentCategoriesNames('{AB95C3C8-707D-440C-BB95-66E43227815F},{2BB56227-FF73-4B51-A8F9-E3A94035ADD9},{DAD3CD74-9CBC-40A5-805D-12DBDA781217}') "

Выдает следующую ошибку:
[16/07/18 18/39/14.354] (W) Invalid object name 'FN_GETINCIDENTCATEGORIESNAMES'

функция точно существует. Рисунок вычесляемого поля прикреплен.

Если функция точно есть, но её не видно из кода, то дело может быть в правах на неё на уровне SQL-сервера. Посмотрите, какие выданы права на другие функции. См. тут, тут и тут.

включила доступ:
GRANT EXECUTE ON fn_GetIncidentCategoriesNames TO public

результат:
fn_GetIncidentCategoriesNames public

выдает ошибку:
[16/07/19 10/44/43.241] (W) Invalid object name 'FN_GETINCIDENTCATEGORIESNAMES'

Странно, что с коде написано
var sSQL = " select dbo.fn_GetIncidentCategoriesNames ('" + CategoriesIDs + "') ";
через dbo., а в ошибке нет dbo.

Марина,

Проверьте, какой запрос уходит в базу данных.

поймала через профайлер

declare @p3 varchar(8000)
set @p3=NULL
exec sp_executesql N' select top 1 @P1 = DBO.FN_GETINCIDENTCATEGORIESNAMES (''{AB95C3C8-707D-440C-BB95-66E43227815F}, {2BB56227-FF73-4B51-A8F9-E3A94035ADD9}, :P2 = {DAD3CD74-9CBC-40A5-805D-12DBDA781217}'') FROM FN_GETINCIDENTCATEGORIESNAMES (''{AB95C3C8-707D-440C-BB95-66E43227815F},{2BB56227-FF73-4B51-A8F9-E3A94035ADD9},{DAD3CD74-9CBC-40A5-805D-12DBDA781217}'')',N'@P1 varchar(8000) OUTPUT',@p3 output
select @p3
go

в SQL редакторе та же ошибка, что и в террасофт
Msg 208, Level 16, State 3, Line 1
Invalid object name 'FN_GETINCIDENTCATEGORIESNAMES'.

нашла ссылку: http://www.community.terrasoft.ru/blogs/2171
и реализовала эту часть:

CREATE FUNCTION tsf_TestScalar(@a int, @b int)
returns int
AS
begin
RETURN 5 + @a + @b
end

код в Террасофте:

var sSQL = " select dbo.tsf_TestScalar(1, 2) " ;
var array = GetSimpleSQLResult(sSQL);

GRANT EXECUTE ON tsf_TestScalar TO public

профайлер:
declare @p3 varchar(8000)
set @p3=NULL
exec sp_executesql N' select top 1 @P1 = DBO.TSF_TESTSCALAR(1, 2) FROM TSF_TESTSCALAR(1, 2)',N'@P1 varchar(8000) OUTPUT',@p3 output
select @p3

Msg 208, Level 16, State 3, Line 1
Invalid object name 'TSF_TESTSCALAR'.

(1 row(s) affected)

Разобралась, все дело было в том, что GetSimpleSQLResult не совсем корректно отрабатывала sql текст, я поменяля тело функции GetSimpleSQLResult на код, который был написан в http://www.community.terrasoft.ru/blogs/2171 и запрос заработал.
Но, к сожалению, изначальная проблема языка осталась, снова читает ?????? знаки.

Боюсь, что в таком случае Вам нужно будет либо всё-таки обновиться, либо изменить подход к решению задачи и отказаться от такой реализации.

Хорошо. Спасибо большое !

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

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

На одном компьютере выпадает ошибка "OLE error 80020102" (скрин в приложение) при попытке отправить письмо, когда Outlook запущен. Когда Outlook закрыт ошибка нет, открывается окно отправки и письмо отправляеться.

Под администратором пробовал: выключать, затем включать интеграцию (TSMSOfficeLibraryConfigurator); перерегистрировать библиотеки TS; установить другой Outlook.
Не помогло. Подскажите что еще можно сделать? Кроме переустановки Windows.

Нравится

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

Добрый день, коллеги!

Запускаю выгрузку данных через Windows Task Scheduler.
D:\TS\313\Bin\TSClient.exe /wnd=wnd_CompaniesExport /USR="supervisor" /PWD=supervisor /CFG=TS

При этом ничего не происходит. Пробовал то же самое поместить в cmd-файл - не помогло.

Если тоже самое запустить из командной строки, то открывается Launcher-окно, и экспорт происходит успешно.

Есть подозрение, что в режиме Scheduler'а не нравится открытие Launcher-окна. Может, можно как-то без него запускать?

Версия TS 3.3.2.313
Windows Server 2012 R2

Нравится

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

Здравствуйте, Владимир!

Данная функциональность не входит в базовую конфигурацию Terrasoft 3.X.
Вероятнее всего, она была разработана в рамках проектного решения для Вашей компании.

Обратитесь, пожалуйста, к разработчикам данной функциональности.

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

Уважаемые, почему такое может быть?
Время от времени выскакивает вот такая ошибка:
Ошибка КЛ
Что делали:
- Лицензии перезаказывали.
- Тайминги (пинги) до сервера проверяли, всё ок
- Сервер sql не загружен.

TS 3.4.0.130

Нравится

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

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

Какое значение содержит системная настройка UpdateActiveSessionPeriod?
Свободные конкурентные лицензии присутствуют, в момент появления окна сообщения?

"Терещук Павел" написал:Какое значение содержит системная настройка UpdateActiveSessionPeriod?
Свободные конкурентные лицензии присутствуют, в момент появления окна сообщения?

UpdateActiveSessionPeriod = 10
Да, присутствуют.

Очистите таблицу tbl_CompetitiveSession и установите большее значение для системной настройки UpdateActiveSessionPeriod

"Терещук Павел" написал:Очистите таблицу tbl_CompetitiveSession и установите большее значение для системной настройки UpdateActiveSessionPeriod

Павел, спасибо! Попробуем...

"Терещук Павел" написал:

Очистите таблицу tbl_CompetitiveSession и установите большее значение для системной настройки UpdateActiveSessionPeriod


Павел, здравствуйте!
Таблица tbl_CompetitiveSession у нас вообще была пустая. Большее значение для системной настройки UpdateActiveSessionPeriod проблему не решает.

Здравствуйте, Евгений!

Данное сообщение возникает из-за того, что при использовании конкурентных лицензий в Terrasoft 3.X происходит учет времени неактивности сотрудника в системе. Системная настройка, в которой указывается значение, в течение которого лицензия может быть неактивна, называется 'UpdateActiveSessionPeriod' и выставляется администратором Terrasoft. В случае, если Вы длительное время не обращались к базе, система отключит Вас для того, чтобы другие пользователи смогли входить в систему, используя занятую Вами лицензию.

Как следствие - после длительного перерыва в работе Вы снова обращаетесь к базе, но в данный момент система Вас уже отсоединила, и Вы не можете передать\получить данные.

Уточните, пожалуйста, для какого максимального значения UpdateActiveSessionPeriod Вы выполняли проверку?

Настройка UpdateActiveSessionPeriod, насколько мы понимаем, отвечает за интервал, через который сервер отключает пользователя, независимо от активности. При работе с системой у сотрудников, сидящих под конкурентными лицензиями, во время работы выскакивает окно с примерно следующим содержанием: "Сервер прервал соединение. Присоединиться заново?" и варианты Да/Нет. Пользователь нажимает Да и продолжает работу. Так вот, время от времени вместо этого вопроса и возникает злополучное окно с ошибкой конкурентных лицензий.

UpdateActiveSessionPeriod увеличили со стандартных 5 до 10. Пробовали при 15, результат тот же. Это происходить при активной работе пользователя в системе.

"Токарев Евгений Евгеньевич" написал:

Настройка UpdateActiveSessionPeriod, насколько мы понимаем, отвечает за интервал, через который сервер отключает пользователя, независимо от активности. При работе с системой у сотрудников, сидящих под конкурентными лицензиями, во время работы выскакивает окно с примерно следующим содержанием: "Сервер прервал соединение. Присоединиться заново?" и варианты Да/Нет. Пользователь нажимает Да и продолжает работу. Так вот, время от времени вместо этого вопроса и возникает злополучное окно с ошибкой конкурентных лицензий.


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

"Токарев Евгений Евгеньевич" написал:

UpdateActiveSessionPeriod увеличили со стандартных 5 до 10. Пробовали при 15, результат тот же. Это происходить при активной работе пользователя в системе.

Для решения проблемы попробуйте UpdateActiveSessionPeriod установить значение 60. Это значит, что в течение простоя в 60 минут, лицензия будет активна и такое сообщение не появится.

"Савельева Алла" написал:Для решения проблемы попробуйте UpdateActiveSessionPeriod установить значение 60. Это значит, что в течение простоя в 60 минут, лицензия будет активна и такое сообщение не появится.

Алла, спасибо! Попробуем.

Добрый день.

Тоже столкнулись с появлением такой ошибки.
UpdateActiveSessionPeriod = 60.
Конкурентных лицензий достаточно. С чем связано ее появление?

Можно увеличить значение системной настройки более чем на 60 мин ?

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

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

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

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

Насчет увеличения значения системной настройки, да его нужно увеличить. Например, для нашей внутренней версии Terrasoft значение параметра UpdateActiveSessionPeriod = 540.

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

В наличии SQL сервер на базе Win2008 Server , где находится база, а работа осуществляется с другого, терминального сервера Win2016 Server. Ошибка конкурентных лицензий возникает с непонятной периодичностью и зависимостью, в т.ч. когда работает в базе всего лишь один-два пользователя при 10 лицензиях. Оба сервера работают в среде VMware ESXi

 

У нас последний год изменилась структура работы и теперь пользователи работают на одном терминальном сервере с установленным клиентом XRM, сама SQL - на отдельном сервере. Регулярно возникает Ошибка Конкурентных лицензий. Пока не отследил закономерность, но просматривая логи Security на SQL сервере заметил, что похоже у нас Ошибка Конкурентных Лицензий возникает при смене Logon ID. Для понимания, влияет ли Logon ID на выделенную лицензию?  Если да, то буду искать причину почему происходит переподключение к БД со сменой Logon ID.

 

Возможно, вместе со сменой LOGONID создаётся новая сессия, а старая остаётся открытой. Вот и превышается лимит одновременных подключений, разрешённый конкурентными лицензиями. Terrasoft 3.X специально под работу на терминальном сервере не тестировались.

Сессии конкурентных пользователей можно посмотреть в tbl_CompetitiveSession.

Коллеги! Решили у себя проблему "ошибка конкурентных лицензий".

Напомню, что у нас организован пул виртуальных серверов в ESXi, с терминальным доступом. Проблема заключалась в том, что мы использовали адресный алиас "sql" для сервера с SQL, соответственно для лицензирования конкурентных лицензий и при обращении клиентов XRM к серверу. После генерации лицензий на IP адрес, проблема исчезла. Вероятно на Primary Domain Controller возникали затыки при множественном обращении к БД и он рвал, и переподключал сессию образуя ошибку.

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

Доброго дня.
Подскажите пожалуйста, не знаю как решить проблемку:
Делал автоматическую нумерацию задач и возникла необходимость пронумеровать все старые задачи (которые были созданы до автонумерации. Они имеют номер 0)
Если у меня последняя задача с номером 4000, то необходимо пронумеровать старые начиная с 4001+

Надеюсь на Вашу помощь.

Terrasoft XRM 3.3.2.43

Нравится

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

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

Выполните обновление записей в БД. Получите список всех записей в таблице tbl_Task у которых номер равен нулю, затем для каждой полученной записи выполните update.

Также, если текущее значение счётчика хранится в системной настройке, его стоит увеличить на количество перенумерованных задач.

Да, значение счетчика хранится в системной настройке.
А автоматизировать каким-либо образом можно сие действие?

Вам же надо обновить 1 раз.

Можно написать SQL-скрипт и запустить.

Cпасибо большое за помощь

Сделал следующим образом:
alter table [Table_name] drop column 'Colomn_Name'
alter table [Table_name] add 'Colomn_name' int identity

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

Добрый день!

Подскажите, как можно реализовать Логирование кнопки Сохранить и Печать в реестре (v.3.3)? Обработчиков нажатия данных кнопок нет.

Нравится

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

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

Такой возможности нет, события отрабатывают на уровне ядра.

Вы можете запретить Печать и Экспорт данных для всего приложения (за это отвечают системные настройки GridCanPrint и GridCanExport), а в базовый реестр, wnd_BaseGridArea, добавить свои кнопки Печати и Экспорта и в них реализовать логирование.

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

Добрый день! Разрабатываем новый функционал с возможностью редактирования древовидного грида.
Подскажите, пожалуйста, почему в древовидном гриде по кнопке Enter на обработчике OnAfterEdit значение DataField.ValueIsChanged == false, какие могут быть варианты? При этом в другом недревовидном гриде в этом же обработчике по Enter все работает и DataField.ValueIsChanged == true.

Нравится

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

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

Это два различных грида и у них различное поведение. Если для простого грида, нажатие на клавишу Enter означает начало редактирования записи (поля), то для древовидного грида, означает завершение редактирования поля.

Может вы знаете, что нам делать c Enter-ом в этой ситуации? - мы не можем правильно его интерпретировать, чтобы значение правильно сохранялось. Возможно ли как-то это поведение по Enter заменить таким же как и в обычном гриде? Или может посоветуете как это нажатие отлавливать и имитировать нажатие, например, стрелки (перемещение курсора), по которой как раз все работает правильно.

Можете более подробно описать "чтобы значение правильно сохранялось". Данные в автоматическом режиме сохраняются.
И зачем, что либо симулировать?

Можете написать более подробно, что хотите сделать.

У нас сохранение в ячейках всегда завязано на условие
DataField.ValueIsChanged == true, хотим сделать сделать что бы true было и по Enter тоже

В событии окна OnKeyDown напишите код:

	if (Key.Value == 13) {
		// было нажатие клавиши Enter
	}

Дальше реализовываете свою логику.

У нас в OnKeyDown нет нужных параметров: DataField.ValueIsChanged
DataField.Value и DataField.OldValue

Не советую к ним привязываться.
Лучше сохраните значение поля в переменную, а затем сравнивайте значения.
В событии OnKeyDown симулируйте поведение ValueIsChanged.

      var Field = {Value = '', ValueIsChanged = false}  
......
 
        if (Key.Value == 13) {
                // было нажатие клавиши Enter
                Field.ValueIsChanged = true;
        }
Показать все комментарии

Делаю Экспорт в 1С из ТС Накладных в Требования-Накладные.
Все нормально экспортируется. Но не могу добавить в продукты в требованиях-накладных значение "Счет учета" Там обычно стоит значение "10.01".

Первоначально импортировал из 1С в ТС "Планы Счетов" (там находится нужный Счет учета). Получил UID1C для значения "10.01".
Далее в OnBeforeRecordExport для продуктов делаю:

// План Счетов
    var PlanUID1C = 'D2F69B00-161D-4128-B15A-57B38560654B';
        var Plan = Param.Obj1C.ПланыСчетов.Хозрасчетный;
        PlanUID1C = Param.Obj1C.NewObject('УникальныйИдентификатор', PlanUID1C.replace('{', '').replace('}', ''));      
        var Plan1C = Plan.GetRef(PlanUID1C);
Select1C.Код = Plan1C;      

Но, на строке
Select1C.Код = Plan1C; выдает ошибку: "Объект не поддерживает это свойство или метод".
Подскажите, как правильно добавить Счет учета?
ТС 3.5.1, 1С 8.3

Нравится

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

Добрый день.

Проверьте существует ли метод Select1C.Код.
Убедитесь, что переменная Plan1C содержит корректное значение для метода Select1C.Код.

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

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

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

Нравится

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

Здравствуйте.
Добавил в раздел "Задачи" новую колонку, однако при нажатии на элемент этой колонки выдает следующее предупреждение:
"Не удается найти карточку редактирования для выбранного элемента"
Я пытался сравнивать с другими колонками, на различия или может я что то упустил...но исправить так и не удалось.
Подскажите пожалуйста как исправить данную ошибку
Заранее спасибо.

Нравится

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

Возможно, справочник, на который ссылается поле, зарегистрирован неверно и в нём не указана карточка.

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