Добрый вечер!
Друзья, может кто-нибудь пытался как-то заставить террасофт обновить весь кэш и настройки форм\сервисов?

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

Может можно как-то сделать какую-нибудь кнопочку на форме для администратора, чтобы она обновляла подкаченные сервисы?!

Заранее благодарен за потраченное время

Нравится

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

Я в таких случаях запускаю карточку прямо из админа. При этом изменения в сохранённых скриптах учитываются.

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

может как-то все же возможно принудительно обновить кеш всего ТС клиента?
( пробовал удалять папки с кешем - никакого эффекта )

как вы это себе представляете? Если сервис окна (или чего угодно) уже загружен - с ним ничего не сделать. Это нужно в ядро добавлять возможность динамической загрузки и обновления сервисов, но еще большой вопрос можно ли это адекватно сделать

День добрый всем!
К сожалению без перезапуска никак, так как сервисы уже загружены, создана масса объектов, при этом в определенно заданной последовательности, согласно написанным скриптам. Если же вы измените только один сервис, который изменяет дальнейшую логику работы, создает совершенно другие объекты, то как вы думаете по какому принципу уничтожить все лишнее, создать новое? А если в этот момент эти объекты используются в Outlook/Word/Excel, JobManager? Если данную функциональность все же рассмотреть, то помимо выше сказанного, нужно реализовывать нотификацию между всеми пользователями, которые работают в данный момент, чтобы у них очистились все кэши + обновились сервисы из базы. Но тут масса вопросов, например, если у этого пользователя в данный момент открыта карточка, скрипт которой нужно обновить, то как это делать, ведь набор функций, обработчиков, контролов мог измениться.

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

Спасибо за крайне развернутые ответы
Но вы немного не так меня поняли

Я не хочу пользоваться данным функционалом (если бы он был, конечно же) со стороны пользователей
Он нужен исключительно для тестирования администратором только что написанного им кода на той же машине, на которой пишется код

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

Интеграцию с аутлуком и т.п. в расчет я не беру, так как они чаще не важны в таких тестах. Да и даже если и нужны - всегда можно библиотеку выключить и включить снова.
А на счет открытых форм и окон.. - при перезаходе в ТС, они, как бы, тоже не остаются открытыми :) Т.е. вполне можно их грохнуть всех и даже и не открывать снова. Нужно будет - сам открыть всегда могу.

Т.е. можно было бы просто убить все объекты, переменные, оставить только чистую форму ТС wnd_Main и снова аккуратненько подобрать все из базы

"Калинин Иван" написал:Я не хочу пользоваться данным функционалом (если бы он был, конечно же) со стороны пользователей
Он нужен исключительно для тестирования администратором только что написанного им кода на той же машине, на которой пишется код

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

"Калинин Иван" написал:А на счет открытых форм и окон.. - при перезаходе в ТС, они, как бы, тоже не остаются открытыми :) Т.е. вполне можно их грохнуть всех и даже и не открывать снова. Нужно будет - сам открыть всегда могу.

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

В общем, в вашем случае предлагаю написать скрипт, в которм будет функция main() и пользоваться из TSAdmin'а кнопкой F9. А в этой функции вы можете сделать все чтот хотите. Например, если нужно запустить с главного окна, то:

function Main() {
  var MainWindow = Services.GetNewItemByUSI('scr_Main');
  MainWindow.Prepare();
  MainWindow.Show();
}

Я что-то, честно говоря, не понимаю вашего подхода
В данной теме я спрашиваю для себя, а не для кого-то
Конкретно в моем случае совершенно не важно, что будет с данными и карточками
Мне важно учесть лишь смены кода в карточке\скрипте
И я прошу помощи в решении именно моей проблемы, а не кого-то, кто может случайно забрести в этот пост и, применив совет из поста (даже не посмотрев, как он работает и не вчитавшись в вопрос) на своей рабочей версии террасофта, получит сброшенные данные из карточек

Я прошу лишь рассказать мне, как это можно сделать в клиенте
Заметьте, пожалуйста, именно в клиенте

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

Как обновить кэш клиента из этого же клиента посредством нажатия кнопки\галки\чего-угодно иного ?

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

Таким образом ситуация, когда

"Артем Гура" написал:Как объяснить пользователю, что все данные в форме, которую он редактировал, не сохранились, потому что ее "грохнули". А если пользователь делал важный звонок, а карточка с объектом грохнулась...
просто невозможна

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

"Андросов Дмитрий" написал:Если вы каким-то образом обнулите стек - чем это будет отличаться от перезапуска? Разве что пароль вводить не надо - но это и так можно автоматизировать

сымитировать перезапуск будет, как минимум, быстрее

Иван, давайте конструктивно:
1. Что значит кэш?
Кэш в Terrasoft'е хранит сервис, который не отличается от сервиса в базе
2. Как происходит считываение из кэша?
При создании объекта этого сервиса. Кэш сверяется с базой и выдается решение откуда грузить.
3. Если хотите нажать на кнопку "вычитать из базы", то вам нужно "пересоздать" все нужные объекты, а перед этим просто удалить их из папки cache. С удалением проблем нет, а вот как искать что пересоздать? А пересоздавать нужно все. Если у вас где-то будет хранится ссылка на какойто-то Dataset и вы пересоздадите, скажем окно с этим Dataset'ом, то в памяти у вас будет 2 Dataset'а, так как старый имеет ссылку и по технологии COM не уничтожится. С этим может быть связан ряд проблем.

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

Итого, просто сделать кнопочку - не получится, сложно - может уйти много времени. Алгоритм пересоздания прост:
1. Удалаем с папки cache нужные файлы (можете все)
2. Пересоздаете объект

Т.е. теоретически, форма должна обновиться, если я
1. удалю весь кэш
2. после этого сохраню измененную форму
и после этого открою форму в клиенте - она будет соответствовать той, которую я сохранил в п. 2 ?!

К сожалению, так не работает
Форма, сохраненная до входа в ТС, отображается независимо от того, что я делаю с кэшом

Вы сожете посмотреть в сервисе scr_WindowUtils функцию WinCache_Get
При открытии окна идет вызов этой функции. Она ищет окно так:
1. Среди созданных в памяти
2. Если не найдено то идет создание
3. При создании пытается считаться с локального кэша (с винчестера)
4. Если не нашло что считать, то идет загрузка из базы

Т.е. вам нужно:
1. Удалить весь кэш с диска
2. В функции WinCache_Get вам нужно, грубо говоря, запретить поиск в памяти, чтобы зашло на строку
Item.Instance = Services.GetNewItemByUSI(USI);
А при вызове этой функции ядро увидит, что локального кэша нет, поэтому считает из базы

Спасибо огромное, обязательно попробую в ближайшее время

К сожалению, не помогает
Уже даже все удалил из функции WinCache_Get, кроме двух строк :

WinCache_Clear();
return WinCache_Add(USI, RecordID); 

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

Вам нужно, грубо говоря, в функции оставить только

return Services.GetNewItemByUSI(USI);

WinCache_Clear() очищает cache в памяти, но не на диске. Перед вызовом

return Services.GetNewItemByUSI(USI);

вам нужно удалить файлы c дериктории %appdata%\Terrasoft\<версия продукта>\Cache

К сожалению, не помогло
Оставил только

return Services.GetNewItemByUSI(USI);
Показать все комментарии

Собственно, после определенного времени в террасофте вылетает окно с "ваш сеанс работы с TSClient.exe превысил допустимое время и был завершен сервером".
Как для определенных пользователей сделать так, чтобы это окно не вылезало?

Нравится

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

Ну даже точнее, чтобы и окна не было, и сеанс не завершался.

Александр, мне кажется, Вы подошли к решению задачи "в лоб" :smile:

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

Клиент не хочет пока замарачиваться с лицензиями, но хочет чтобы не вылетало.
Вопрос: можно ли решить "в лоб" или это в ядре записано?

Александр, решить то можно, но никто за это не возьмется по нескольким причинам:
1. Данная реализация бессмысленна, поскольку это политика лицензирование и для решения задачи есть именные лицензии;
2. для реализации, для клиента нужно пересобирать специальные исполняемые файлы, в дальнейшем что приведет к ограничению возможности обновления клиента;
3. Задача довольно трудоемка.

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

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

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

[#Читать данные добавленного лота аукциона.Результат выборки.Ссылка#] + "\n\n" + [#Читать данные добавленного лота аукциона.Результат выборки.Описание ссылки#] + "\n\n" + [#Читать данные добавленного лота аукциона.Результат выборки.Заметки#]

Какой нибудь спецсимвол вместо "\n"?

Нравится

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

Добрый день.

Символы отображаются в заметках или нет ни перехода, ни текста?

В заметках символы "\n" не отображаются, но и перехода на новую строку нет, это на детали Заметки
А в колонке реестра, что интересно, переводы строк есть, как и хотелось

Здравствуйте Александр.
Деталь "Заметки" отображает HTML текст, а реестр нет. Поэтому Вам нужно как-то определится, где Вам нужен перевод строки. Если на детали, то вместо "\n\n" вставьте "[br /]". Примечание, квадратные скобки заменить знаками > <. Но учтите, что в реестре у Вас так запись и отобразится "[Данные1][br /][Данные2]", и мало того, что никаких переходов, так еще и теги будут выводиться. Я рекомендую Вам не выводить колонку "Заметки" в реестр. Если Вы хотите туда что-нить запихнуть, то удаляйте при этом теги. В качестве обходного решения могу Вам порекомендовать такой вариант. В дизайнере объекта создайте колонку с типом "неограниченный текст". Потом перейдите в дизайнер процессов и при сохранении записи, т.е. на событии "...Saving" уберите теги и вставьте в новую колонку. Старую колонку сделайте системной, чтобы пользователи не путались при вытаскивании колонок в реестр и не вытащили ее случайно. Опубликуйте объект и наступит Вам счастье.:cool:

Супер. Это то что хотелось услышать :-) Именно с фразы

"Бабуков Андрей Александрович" написал:Деталь "Заметки" отображает HTML текст, а реестр нет. Поэтому Вам нужно как-то определится, где Вам нужен перевод строки. Если на детали, то вместо "\n\n" вставьте "[br /]".

все встало на места.
THNX.

Когда-нибудь...., но не при нашей жизни..... ;-)

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

Как скрыть рабочее место от определенных пользователей?

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

Нравится

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

Добрый день.

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

Александр, добрый день!

Прошу описать постановку задачи, чего необходимо добиться:
1. Скрытие какого-то раздела? Для этого у нас есть базовые средства.
2. Скрытие набора разделов от определенных пользователей. Нужно тогда собрать все такие разделы в определенное рабочее место и настроить доступ. Если у какого то клиента нет доступа по всем разделам из рабочего места то и само рабочее место не будет видно.

В том то и дело, что есть разделы которые входят и в те рабочие места, которые надо видеть, и в те которые видеть не надо.

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

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

Добрый день!

Вопрос по этой теме: Как в разделе Задачи и Документы скрыть у пользователя доступ к чужим задачам и документам. В настройках Администрирование я могу или дать полный доступ к разделу или скрыть раздел, а пользователю нужен доступ только к своим Задачам и Документам. Нельзя что бы видел складской сотрудник задачу, которую создает бухгалтер или директор.

Спасибо

Людмила, согласно распределению прав доступа, автор записи всегда имеет полный набор прав на созданную им запись. Права для других пользователей и ролей определяются настройками прав по умолчанию. Для решения задачи Вам необходимо: 1. Раздать для ролей пользователей права доступа по умолчанию (раздел "Администрирование" - "Права доступа по умолчанию"). А именно, удалить все настройки с детали [Права по умолчанию]. В результате, создаваемые записи будут доступны только автору и пользователю с правами администратора. 2. Переопределить права на уже созданные записи посредством детали [Доступ] (деталь в разделе). Если записей много, можно воспользоваться скриптом перераздачи прав. 

Наталья , спасибо большое !

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

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

Нравится

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

SysSchema и SysSchemaInSolution.
Подробнее тут и тут.

А после того как удалены записи в таблицах можно удалять сами таблицы , если речь идёт об объектах?

в смысле удалены записи в системных таблицах, а после удалять таблицы самих объектов

Здравствуйте!
Из BPMonline уже удалять ничего не надо будет, просто обновите страницу и записей не будет.

Сергей, я имею ввиду могу ли я после удаления данных из системных таблиц например об объекте Заказ, удалить и саму таблицу Заказ из БД BPM

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

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

В процессе через добавление данных создается для сотрудника активность, прописал сотрудника в поле "ответственный", а его начальника в поля "автор" и "создал".

Все в порядке, активность создается, все попадают в участники активности, начальник прекрасно прописался и в поле "создал", но сотрудник видит активность в списке, а начальник нет.

В чем беда?

Нравится

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

Задача полностью следующая:
Есть диспетчер, он создает карточки заявок, от создания карточки заявки стартует процесс, в ходе которого создается активность соответствующему сотруднику.
Сотрудники работают в нескольких отделах, у которых есть у каждого свой начальник.
Диспетчер создает заявки для сотрудников ВСЕХ отделов
Надо сделать, так чтобы эти активности были видны только диспетчеру, сотруднику и его начальнику.

С начальником проблемы...(смешно :-)), так как в ходе создания активности в процессе диспетчер получает права автоматом, сотрудника я прописываю в Owner'а, а вот с начальником беда.
Как уже писал выше, прописывать начальника в "автор" и "создал" не помогает.....

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

Как быть то?

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

UPD: Точнее решение даже более радикальное, снимающее проблему раз и навсегда: добавить добавление начальника сотрудника в доступ при сохранении активности.
Вот только вопроса два остается:
1. Куда именно это лучше всего вставить в процессе активности?
2. И как мне в коде достучатся до детали доступ с целью добавления туда записи?

Помогите, люди добрые, сроки горят, хочу в отпуск......

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

раздачу прав доступа из процесса можно реализовать скриптом. Примеры запросов к БД можно посмотреть в BPMonline SDK: http://www.terrasoft.ru/bpmonlinesdk/UsingInsertExamples.html

Формат названия таблицы с правами в БД следующий:

Sys<название_исходной таблицы>Right

Только не совсем понятно в какое место процесса Активности все это вставить......
А также что конкретно писать в таблицу Sys......Right.....
Жду инструкцию.

Александр, потребовалось некоторое дополнительное время на описание примера. Пример предоставлен Вам в Вашем обращении на портале.

В случае, если Вами планируется выполнять раздачу прав, рекомендуется это делать в обработчике события ActivitySaved (добавить еще один поток и скрипт в процесс объекта)

Ок, спасибо большое. :biggrin:

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

Давно подумываю, как бы прикрутить контроль (и восстановление) версий для файлов конфигурации. И тут меня осенило). Включил логирование для таблицы tbl_Service - работает :biggrin:

Осталось повесить функционал выгрузки сервисов, отката и детализации изменений.
Если первые два пункта я примерно представляю, как сделать, то детализация...

Вопрос:
Может быть, кто-нибудь знает, как переделать триггер, чтобы десериализировать XMLStorage и сравнить по тексту прямо на сервере?

Нравится

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

Посмотрите на наше решение, возможно будет интересно:
http://www.community.terrasoft.ua/catalog/4245

спасибо Валерий, но так много мне пока не надо. Хотя демо-версию я бы посмотрел.

Ещё есть ККК. Возможно, потребуется его адаптация под 3.4.

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

Добрый день.
В процесс открываю Страницу редактирования протокола, на скриншоте выделил зеленым цветом, у меня теперь такой вопрос когда пользователь нажимает кнопки «Ок» или «Применить» процесс идет по одной ветке, а когда нажимают кнопку «Отмена» или закрывает страничку то по другой, как можно определить пользователь какую кнопку нажал? есть ли примеры. Спасибо.
Версия системы 5.1.1.155

Нравится

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

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

Смотрите, в Вашем случае элемент "карточка редактирования" можно настроить следующим образом:

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

"Олейник Дмитрий" написал:

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

Смотрите, в Вашем случае элемент "карточка редактирования" можно настроить следующим образом:

считать элемент завершенным при нажатии кнопки "ОК", и добавить какие либо условия по значениям колонок (по желанию).

Тогда Вы пойдете далее по процессу только тогда, когда будет нажата кнопка "ОК". Если пользователь закроет карточку - можно продолжить выполнение этого процесса снова на этом же шаге (открытие карточки редактирования).

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки


считать элемент завершенным при нажатии кнопки "ОК" ----- как можно считать примеры есть в скрипте, как та внутри процесса определить

Баглан, на второй вкладке, Вы можете регулировать данные моменты:

"Олейник Дмитрий" написал:5.1.1.155

у нас нет такого, версия наша 5.1.1.155 как быть?

А у Вас On-Site или On-Demand Версия?
Напишите, пожалуйста, Ваш вопрос в тех. поддержку (support@terrasoft.ru), я думаю потребуется удаленное подключение для решение проблемы.

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

Есть функциональность - берутся данные из одного модуля и импортируются в другой, с учетом определенных условий + небольшие преобразования. Какие-то данные не попадают в импорт. Задача - вывести после импорта информацию о данных, которые не импортировавились - при этом определены 3 условия, при котором данные не будут испортироваться. Т.е. "достать" эти данные - не проблема. Но в каком виде и как их можно подать пользователю? В MessageBox информацию о 200 (например) контрактах (даже если выводить только Title) не запихнуть...

Нравится

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

функции OpenFileWithFullAccess и WriteMessageToFile Вам помогут
можете посмотреть как это реализовано, например, в контексте интеграции из экселя:
scr_DataflowUtils

function ImportDataByImportObject(...) {
...
		WriteMessageToFile(...);
		ImportObject.Imported = true;
	} finally {
...
}

scr_DataflowExcelUtils

function ExecuteImportFromExcel(...) {
                if (Assigned(DataflowUtils.ImportLogFile)){
			if (ShowConfirmationDialog(msgDoYouWantLookImportLog) == wmrYes){
				OpenFileWithFullAccess(LogFileName, true);
			}
			DataflowUtils.ImportLogFile.Close();                                                                                                             
			DataflowUtils.ImportLogFile = null;
		}
...
}

Спасибо. С созданием и показом содержимого файла разобралась. Код :

DatasetPrice.Open();		
if (IsDatasetEmpty(DatasetPrice)) {
    DatasetPrice.Close();
    return;
}		
DatasetPrice.GotoFirst();
 
var Message = '';
var LogFileName = GetCustomLogFileName('BillingInfo');  
var FileSystemObject = GetFileSystemObject();
var InfoLogFile = FileSystemObject.CreateTextFile(LogFileName, true, true);
 
while (!DatasetPrice.IsEOF)
{
	Message = DatasetPrice.Values('ContractTitle');
	InfoLogFile.WriteLine(Message);
	DatasetPrice.GotoNext();
}
OpenFileWithFullAccess(LogFileName);

SaveToFile - вроде бы метод для объектов террасофт, а не для текста, и он (в вариациях) не позволяет дозаписывать

Надо еще определиться, что пользователь будет делать с этой информацией. Например, если он ее просто скопирует - возможно лучше не создавать файл. а вывести окно с MemoControl.
Если вам удобно сначала собрать инфо, а потом записывать - ваш вариант то, что нужно. Если удобнее дописывать в файл - используйте .WriteLine (http://msdn.microsoft.com/en-us/library/t5399c99(v=vs.84).aspx) и в конце закрывайте файл.
Опять-таки, пользователь не увидит закрытый файл - его надо открыть System.OpenFile(FileName, fatReadWrite) (http://terrasoft.ru/sdk/IScriptUtils__OpenFile@[in]_BSTR@[in]_FileAcces…)

а ну вы и сами уже)

"Андросов Дмитрий" написал:

а ну вы и сами уже)


Да, спасибо. Я потому и удалила предыдущий вопрос

Еще вопрос. А как здесь можно указать конкретное место для сохранения файла? Например на диске С?

function GetCustomLogFileName(LogName) {
	CreateFolder(Connector.LogsDirectory);
	return Connector.LogsDirectory + LogName+ '_' + 
	DateToStr(new Date(System.Now()), '') + '_' +TimeToStr(new Date(System.Now()), '')  + '.log';     
}

При попытке изменить эту функцию на

function GetLogFileName(LogName) {	
	return 'C:\\' + LogName+ '_' + 
			DateToStr(new Date(System.Now()), '') + '_' +TimeToStr(new Date(System.Now()), '')  + '.log';     
}

вылетаю с ошибкой Invalid procedure call or argument

корневая папка диска С считается системной - мб у вас не хватает прав или включен UAC. Так-то вроде все норм

Наталия, протестировала код, отрабатывает корректно. Попробуйте проверить права, как порекомендовал Дмитрий.

А у меня, визуально, выглядит это так :

Такое ощущение, что апострофом "не закрываются" кавычки... Из-за символа "\".

это старый баг подсветки и больше ничего - работает как должно

Ну вот и тем не менее - не работало. Хотя и не ругалось. Я тестировала выводом на экран через MessageBox - выдало пустоту.

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

В созданном разделе добавляю статическую группу, выдает ошибку (см. приложенный файл)
Exception Message: Элемент коллекции с именем PGNHK_AuctionLot не найден Exception Type: Terrasoft.Common.ItemNotFoundException Exception Source: Terrasoft.Core

Нравится

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

Ощущение что потерялась какая то связь в SQL'е, но вот какая?

Добрый день.

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

Добрый день, Александр.
Пара уточняющих вопросов.

  1. 1. Когда Вы создавали раздел, Вы указали, что объект должен входить во множество групп?
  2. 2. У Вас присутствуют объекты [Object]Folder и [Object]InFolder?
  3. 3. И последнее. В какой момент вываливается этот Exception? При нажатии на элемент контекстного меню, при сохранении, или, судя по CallStack'у, при открытии раздела?

Либо же воспользуйтесь, как говорил Максим услугами саппорта.
Спасибо.
P.S. Возможно в комментарии дублирование нумерации, но это потому что на данный момент записи комментариев не отображают нумерацию тегами [ol]->[li].

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