Добрый день! В разделе клиенты необходимо создать вкладку "Мои клиенты", которая бы отображала только клиентов с последней продажей текущего контакта (пользователя). Написали скрипт (рис. Результат), который отображает подобных клиентов, перенесли его структуру в сервис sq нужного нам раздела, но в системе отображаются совсем не похожие на предыдущие результаты скрипта записи.
Скриншоты и скрипт прилагаю. Очень интересно, что даже запрос на сервер не идет почему то...

Нравится

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

А почему должна добавляться фильтрация, если она не включена?
У Вас InvoiceFilters в фильтрации MyAcc не влючен и плюс ко всему, отсутствует связь Контрагента со Счетом в фильтрации.

Обратите внимание как настроена фильтрация IndustryFilters или InvoiceFilters в сервисе sq_Account.

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

Как можно открыть справочник с кнопки на отдельно взятой странице, не из меню ?
пытался открыть вот так:
var wnd = Services.GetNewItemByUSI('wnd_BranchesGridArea');
wnd.Prepare();
wnd.ShowModal();
так нельзя, окно открывается, но данных нет в нем и ошибки лезут.

Нравится

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

Вашу задачу можно решить несколькими способами:
1. Свой вариант

	var wndContactsGridArea =  Services.GetNewItemByUSI('wnd_ContactGridArea');
	wndContactsGridArea.Prepare();
	var Dataset = wndContactsGridArea.ComponentsByName('dlData').Dataset;
	RefreshDataset(Dataset);
	wndContactsGridArea.ShowModal();

Результат:

2. Стандартный вариант

	var Dataset = Services.GetNewItemByUSI('ds_Contact');
    var SelectDataWindow = GetSingleItemByCode('wnd_SelectData', 'Contacts');
	SetAttribute(SelectDataWindow, 'Dataset', Dataset);
	SetAttribute(SelectDataWindow, 'DisplayFieldNames', 'Name;AccountID;ContactTypeID');
	SetAttribute(SelectDataWindow, 'SearchFieldNames', 'Name;AccountID');
	SetAttribute(SelectDataWindow, 'KeyFieldName', 'ID');
	SetAttribute(SelectDataWindow, 'SearchFieldName', 'Name');
	SetAttribute(SelectDataWindow, 'NotifyObject', Self);
	SetAttribute(SelectDataWindow, 'IsReadOnly', true);
	SelectDataWindow.Prepare();
	SelectDataWindow.Show();

Результат:

3. Использовать функцию ShowSelectDataWindow из сервиса scr_WindowUtils
4. Свой вариант решения. Где создается свое окно выбора, со своей логикой работы.

спасибо!

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

Как можно открыть справочник с кнопки на отдельно взятой странице, не из меню ?
пытался открыть вот так:
var wnd = Services.GetNewItemByUSI('wnd_BranchesGridArea');
wnd.Prepare();
wnd.ShowModal();
так нельзя, окно открывается, но данных нет в нем и ошибки лезут.

Нравится

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

В Террасофте на определенном компьютере под любым пользователем возникла такая ошибка:

Дублируется значение свойства 'Caption'. Значение 'Marquesas Standard Time' уже существует

Деббагер показывает на скрипт scr_Utils:

var ServiceKey = Code + UniqueCode;
        var Item = SingleItemsDictionary(ServiceKey);
        if (!Assigned(Item)) {
           strong> Item = Services.GetNewItemByUSI(Code);strong>
                SingleItemsDictionary(ServiceKey) = Item;
        }
       

 

При попытке открыть в Админке сервис enm_TimeZone возникает ошибка и сервис не открывается:
Невозможно редактировать сервис 'Common\Dictionaries\TimeZone\enm_TimeZone'. Дублируется значение свойства 'Caption'. Значение 'Marquesas Standard Time' уже существует.

Такая проблема только на компьютере, где установили какую-то программу. На всех других компьютерах такой ошибка нет.
В чем проблема?

Нравится

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

А выгрузить enm_TimeZone в xml экспортом в файл из администратора и затем поправить его вручную, сохранить и загрузить обратно пробовали? Поищите внутри xml наверняка реально найдете дублирующийся caption.

"Alex GF" написал:На всех других компьютерах такой ошибка нет.

И конфигуратором на других компах открыть получается?

Кстати еще банальный вариант - почистите на проблемных компах кэш, профиль, проверьте версию бинарников. Да, смешной совет, но все же...

Да, на других компьютерах конфигуратором открывается enm_TimeZone нормально! Только на этом одном компьютере такая проблема. Первоначально на нем также не было никаких проблем. Они начались, после того как туда поставили какую-то программу.
Чистили кэш, профиль. Даже сносили и заново ставили Террасофт - ничего не помогает.
В сервисе enm_TimeZone нет никакого Marquesas Standart Time.

"Alex GF" написал:Они начались, после того как туда поставили какую-то программу.

Ну вот похоже туда и копать... тут что то специфичное((
А часовой пояс на проблемной машине смотрели?
по отладке скорее всего лезет из scr_Main функция SetMainWindowCaption()
Там есть строка GetTimeZoneCaption(CurrentUser.TimeZone)) вот посмотрите отладчиком что там за CurrentUser.TimeZone на этой машине
Или из функции CheckTimeZone() там же...

Alex GF,

Здравствуйте! Не помните в чем была причина? Столкнулась с такой же проблемой

В террасофт в enm_TimeZone подтягиваются значения из ОС, то есть на каждом компьютере разные списки. Поэтому ошибка только на некоторых компьютерах. Причиной может быть установка какой-либо программы/обновления, которая дополняет список час.поясов в системе.

Ошибка решается удалением записи, на которую жалуется террасофт через реестр ОС (находим папку с проблемным час.поясом):  в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Time Zones

Если речь о Sudan Standard Time, то оно пришло в обновлении Windows. Действительно, если не собираетесь в Судан, проще удалить его в реестре при помощи Regedit.exe.

Теперь и Sao Tome Standard Time. Лечение аналогичное.

Теперь и "Острова Теркс и Кайкос UTC-04:00"

Мы "разрулили" эту траблу (второй пункт).

Варианты Решения:

1. Обновить библиотеку местного диалекта для часовых поясов tzres.dll.mui. Не факт, что следующее обновление её не затрёт.

2. Создать новый энумератор (имя + ID), заполнять его кодом JScript ручками из ОС при запуске и заменить вызовы на него. Не забываем таблицы и датасеты типа ds_Contact, tbl_City etc.. 

3. Заполнять энумератор самим, а хексредактором "исправить" :)  злосчастное имя enm_TimeZone в библиотеке TSObjectLibrary

Можно и так. Но в таком случае нет смысла вести все новые экзотические пояса, где нет ни одного пользователя Terrasoft 3.Х. А основные ввести в список вручную один раз. Или в скрипте циклом один раз скопировать из автогенерированного в свою копию.

Заполнили через Services.SaveItem(), всё в норме. :)

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

Программа (аналог TSAdmin) PVC от Валерий Андрусик умеет искать прямо в конфигурации; причём, как в скриптах, так и в остальных сервисах.

В коробочной версии TS3.3.1 это tbl_Contact, tbl_City, их датасеты и несколько скриптов.

Мне для поиска хватает выгрузки в файлы, а потом в папке Alt+F7.

Я раньше тоже так работал) Настроить INI-файл выгрузки на нужное, подождать с полчасика..

Кстати, если в TS3.3.1 выгружать скрипты сервисом, то их текст  - зазипован в CDATA. А для текстового скрипта - отдельная опция..

А в PVC сразу можно в сервис перейти на нужную строку-структуру. А не копировать имя сервиса и искать его в TSAdmin ))

3.3.1 сейчас довольно редко пользуются. Как и 3.Х вообще.

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

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

Возникла задача построить график по собственному запросу. Пошел штатным путём: Графики-добавить, обозвал его, выбрал раздел, расположение. Запрос - нужного запроса в предлагаемом списке, конечно, нет, поэтому нажимаю Добавить. В списке таблиц, предлагаемых в качестве Главной, отсутствует та, на основании которой у меня строится запрос - tbl_tasklog. Как до неё добраться?
Возможно, я изначально пошел по неправильному пути. Исходная постановка задачи: хочу видеть сколько задач за выбранный период изменили своё состояние. Показать с группировкой по конечному состоянию.

Нравится

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

Вдогонку. Какие условия должны выполняться, чтобы стала активна кнопка "Ок" в окошке создания нового графика? Только заполнение обязательных полей не включает кнопку сохранения.

Если так и не увидите tbl_tasklog, то можно создать в БД View на основании этой таблицы и на основании этого View - сервис tbl_ в Terrasoft

Таблица не видна из-за условия в запросе:

SELECT DISTINCT TOP 40
	[tbl_Service].[ID] AS [ID],
	[tbl_Service].[Code] AS [Code],
	[tbl_Service].[Caption] AS [Caption],
	NULL AS [NewCode]
FROM
	[dbo].[tbl_Service] AS [tbl_Service]
LEFT OUTER JOIN
	[dbo].[tbl_Workspace] AS [tbl_Workspace] ON [tbl_Workspace].[TableID] = [tbl_Service].[ID]
WHERE(((NOT [tbl_Workspace].[TableID] IS NULL)))
ORDER BY
	3 ASC

этот запрос формируется в сервисе sq_SelectService (не рекомендую его менять) вызываемый источником данных ds_SelectService.

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

	var SelectService = ShowSelectServiceWindow(Services.GetNewItemByUSI('ds_SelectService'), 
		'Caption;Code', 'Caption;Code',	'Code', '', 'Caption', Sender.Value, null,
		'', true, true, '', '', true);
Показать все комментарии

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

Нравится

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

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

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

А в User query можно же задать подчиненные детали, а потом на их базе сделать Excel-отчет. И будут нужные вам уровни

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

Нам также подойдет вариант с разделением этих 3-х уровней на столбцы в Excel
но вопрос в том, как написать это кодом, исправив формат стандартной выгрузки лишь в одном разделе

менеджер клиент направление

"Кочев Антон Сергеевич" написал:с разделением этих 3-х уровней на столбцы

Из данного описания совсем непонятно, как у вас реализованы эти уровни.

На обучении разработке TS 3.x давали пример, как из TS создавать Excel-файл.

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

Добрый день.

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

В чем может быть проблема?

Нравится

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

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

Ещё раз проверьте настройку прав доступа для данного пользователя:
1) права доступа на группу таблиц [Договоры];
2) права доступа по умолчанию на группу таблиц [Договоры].

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

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

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

Хочу пользоваться современными функциями JS, например array.prototype.forEach
подключаю библиотеку расширяющую до es5, подключается без проблем (https://github.com/es-shims/es5-shim)
В свой скрипт подключаю библиотеку и вроде бы все должно работать, но
но при попытке использования функции array.forEach - ошибка.
Видимо связано с тем, что если сделать var a = new array, typeof a = 'object' !! (должно быть array)
Вопрос: Возможно ли расширить функционал jscript до es5, если да - то как ?

Нравится

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

Доброго дня!
Столкнулся со след. задачей:
Имеется 2 раздела: "Заказы" и "Инженерная спецификация"
Оба раздела имеют свою древовидную деталь "Продукты"
Мне необходимо скопировать выделенные продукты из раздела "Инженерная спецификация" в раздел "Заказы". Копироваться должны только определенные поля.
Подскажите пожалуйста, как это можно реализовать?

Нравится

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

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

У каждого грида есть свойство SelectedIDs - возвращаемое массив идентификаторов выделенных записей. Зная идентификатор записи, можете выполнить обновление продуктов в древовидном реестре другого реестре. Обновление можно реализовать несколькими способами:

  1. 1. Используя датасет
  2. 2. Используя запрос на обновление
  3. 3. Используя хранимую процедуру

Рекомендую использовать первый способ, выполнить обновление через датасет.
Как за пример, можете взять логику обновления данных детали [Средства связи] раздела [Контрагент] реализованной в функции ActualizeCommunication сервиса scr_Account.

Cпасибо, сейчас попробую!

Можно еще посмотреть реализацию копирования дерева продуктов в scr_DocumentUtils...
Функция CopyOfferingInItemDetail. И далее из нее вызовы...

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

Добрый день,
по умолчанию fast report выводит данные в мастер дата бесконечно сверху вниз, как сделать чтобы он выводил бесконечно слева-направо ?

Нравится

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

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

Это можно реализовать с помощью элемента управления Cross-tab object.

спасибо, попробую

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