Добрый день!

Кто поможет решить вопрос с запуском TS 3.3.2 на машине с Windows 10?
После логина выдается ошибка "Automation server can't create object", после чего программа запускается дальше. Запускается As Administrator и пробовал с разными уровнями совместимости.

Вторая проблема - это печать word-отчетов на Word 2016. Библиотеки Office зарегистрировались, Add-Ins'ы Terrasoft в Word показываются, но из самого Terrasoft word-отчеты не запускаются: "Microsoft Word is not setup in your system"

Спасибо за помощь

Нравится

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

1. Нужно первый раз запустить с правами администратора Windows.
2. Нужно зайти в TSAdmin и вписать в конфигурации номер версии Office 16.0 , подробнее см. тут.
16.0

"Зверев Александр" написал:1. Нужно первый раз запустить с правами администратора Windows.

Да, так и запускаем - ошибка всё равно появляется.

"Зверев Александр" написал:2. Нужно зайти в TSAdmin и вписать в конфигурации номер версии Office 16.0

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

"Владимир Соколов" написал:Да, так и запускаем - ошибка всё равно появляется.

Значит, чего-то не хватает на уровне Windows, не создаётся COM-объект.

"Владимир Соколов" написал:С остальными будем разбираться

Это может быть что угодно в самом коде, генерирующем отчёт.
Или неверный формат файла-шаблона. Например, нет листа в Excel с нужным названием или что-то аналогичное в Word.
Лучше всего пошагово пройти в отладчике.

"Зверев Александр" написал:Значит, чего-то не хватает на уровне Windows, не создаётся COM-объект.

А как-то можно понять, чего именно? Или это всё танцы с бубном?

Принципиальных запретов на работу в Windows 10 нет, хотя она и не гарантируется. Ведь разработка 3.Х прекратилась раньше, чем вышла эта версия Windows.

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

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

На окне редактирования добавила поле типа LookupDataControl.
Данное поле предназначено только для выбора значения из выпадающего списка, чтобы передать выбранное значение как параметр.
DatasetLink этого поля имеет не стандартное название dlData, а dlUsageRange. Данное поле не активно на карточке редактирования.

Фильтрую датасет:

var UsageRangeDataset = Self.ComponentsByName('dlUsageRange').Dataset;
UsageRangeDataset.Close();
ApplyDatasetFilter(UsageRangeDataset, 'ID', 999, true);   // 999-фиктивное значение, чтобы при открытии окна, поле было пустым. ID имеет тип int
UsageRangeDataset.Open();

Когда выбираю значение из списка, генерируется ошибка: Catastrophic failure

Вопрос: Как открыть это поле?

Нравится

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

Марина, мне кажется, для Ваших целей нужно использовать не LookupDataControl, а LookupControl.
Там указывается LookupDatasetLink, а выбранное из него значение хранится в свойствах Value и DisplayValue компонента.

Здравствуйте Александр. Спасибо.

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

Здравствуйте, Коллеги!:)
В моей работе потребовалось закрыть доступ к ряду справочников(возможен только просмотр). Появилась проблема со справочником ОПФ. Этот справочник открывается особым образом(прикрепил картинку). Пробовал через администрирование, получается, но он блокирует для всех, кроме сис. админов, а мне требуется перекрыть именно всем, даже сис. админу. Помогите, пожалуйста, добрые люди:)

Нравится

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

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

Можно ограничить права на редактирование справочников с помошью права доступа на операцию с кодом CanManageLookup.

"Мотков Илья" написал:

Можно ограничить права на редактирование справочников с помошью права доступа на операцию с кодом CanManageLookup.

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

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

Здравствуйте, Коллеги!:)
В моей работе потребовалось закрыть доступ к ряду справочников(возможен только просмотр). Появилась проблема со справочником ОПФ. Этот справочник открывается особым образом(прикрепил картинку). Пробовал через администрирование, получается, но он блокирует для всех, кроме сис. админов, а мне требуется перекрыть именно всем, даже сис. админу. Помогите, пожалуйста, добрые люди:)

Нравится

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

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

Особенность системных администраторов в том, что они могут делать все.
Это администрируется системными операциями:

  • CanDeleteEverything
  • CanInsertEverything
  • CanSelectEverything
  • CanUpdateEverything

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

По умолчанию во всех справочниках проверяются права на системную операцию CanManageLookups (логика родительского объекта BaseLookup). Проверка реализована в процессе объекта в методе CanManageLookups.

Можно сделать следующее:
1) Создать новую системную операцию и никому на нее права не давать. Предположим, что ее код CanManageSpecialLookups. Естественно, права на эту операцию мы никому не даем.
2) Заместить объект справочника, в процессе объекта переопределить метод CheckCanManageLookups (установить признак "Переопределен").
Переопределенный метод должен выглядеть следующим образом:
UserConnection.DBSecurityEngine.CheckCanExecuteOperation("CanManageSpecialLookups");

После публикации только пользователи с правами на системную операцию CanManageSpecialLookups (то есть никто) смогут менять/добавлять/изменять данные справочника.

Спасибо, Алексей! Получилось

Так понятно объяснено и в краткие сроки:)

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

Небходимо на редактируемом окне создать поле (LookupDataControl).Т.е нужен выпадающий список названий. Данные находятся в таблице на связанном сервере (linked server). Поэтому создала источник данных со строкой соединения(ADODataset).

Но, в ADODataset нет поля типа "поле справочника", чтобы указать конкретную колонку из таблицы как колонку для отображения. Версия 3.2.0.90

Как можно иначе реализовать?

Спасибо.

Нравится

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

"Марина Карапетян" написал:Как можно иначе реализовать?

Можно сделать в основной базе view, которая тянет данные из linked server.
А затем к этой view создать обычные сервисы таблицы (название должно совпадать, в базе не сохранять), запроса и датасета.

Здравствуйте Александр. Спасибо.

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

Здравствуйте, Коллеги! У меня возник вопрос по фильтрам, почему когда массив arrayNeededIdOfSalesCenter пуст, он мне выводит все значения, а не пустоту? Когда массив не пуст, все нормально отрабатывает. Как получить именно пустоту? Заранее спасибо за помощь.
"ITSaleCenter": {
"lookupListConfig": {
"filters": [
function() {
var currentSaleArea = this.get("ITSaleArea"),
filterGroupMain = Ext.create("Terrasoft.FilterGroup");
if (currentSaleArea) {
var arrayNeededIdOfSalesCenter = [];
this.get("CollectionSaleCenter").each(function(item) {
arrayNeededIdOfSalesCenter.push(item.get("ITSysAdminUnit.Name"));
});
filterGroupMain.add("IsNeededNameSaleCenter",
Terrasoft.createColumnInFilterWithParameters(
"Name",
arrayNeededIdOfSalesCenter));
}
return filterGroupMain;
}
]
}
},

Нравится

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

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

"ITSaleCenter": {
"lookupListConfig": {
"filters": [
function() {
var currentSaleArea = this.get("ITSaleArea"),
filterGroupMain = Ext.create("Terrasoft.FilterGroup");
if (currentSaleArea) {
var arrayNeededIdOfSalesCenter = [];
this.get("CollectionSaleCenter").each(function(item) {
arrayNeededIdOfSalesCenter.push(item.get("ITSysAdminUnit.Name"));
});

if (arrayNeededIdOfSalesCenter.length == 0) {
arrayNeededIdOfSalesCenter.push("#!@^");
}

filterGroupMain.add("IsNeededNameSaleCenter",
Terrasoft.createColumnInFilterWithParameters(
"Name",
arrayNeededIdOfSalesCenter));
}
return filterGroupMain;
}
]
}
},

В таком случае при отсутствии значений в arrayNeededIdOfSalesCenter, ITSaleCenter будет пуст.

Да, поведение не совсем очевидное, но оно действительно такое.
Необходимо проверять массив на пустоту, перед формированием фильтра, если он не пуст - формируем Ваш createColumnInFilterWithParameters, в случае пустого массива - возвращать другой фильтр, специальный который всегда в окне справочника будет выдавать "пустоту"
я обычно использую такой "попросим вернуть Id равные NULL":

Terrasoft.createColumnIsNullFilter("Id");

решение универсальное, колонка Id у нас есть везде, а нулевые значения в ней не встречаются :)

Всем спасибо :)

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

Добрый день!
Возвращаясь к filestream (топик https://community.terrasoft.ru/forum/topic/5410), можно его все-таки использовать в Террасофте для таблицы файлов или нет?
TS 3.4.1.
SQL 2014
Террасофт умеет работать с данными типа varbinary(max) filestream?

1) включили возможность файстрима на сервере
2)создали файловую группу для базы
3)в качестве проверки функциональности создали новую таблицу через sql, там поле varbinary(max) filestream-засунули туда данные через sql - ну тут все ок
4) добавили в таблицу tbl_Files новое поле FileData1 varbinary(max) filestream; (перед этим пришлось удалить триггер к этой таблице - на instead of delete)
5) Пошли в террасофт администратор, там взяли в таблице tbl_Files, полe FileData сменила на FileData1 (не меняя при этом тип, и не сохраняя в бд потом таблицу (потому как не видим типа varbinary в приложении), пошли в sq_Files - там выбрали FileData1 вместо FileData.
6) Зашли в террасофт, добавили файл, файл даже добавился файловую группу, но террасофт его не может потом прочесть, потому что видимо не подозревает про тип варбинари с признаком файлстрим

Есть пути решения?

Нравится

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

Добрый день. Не получается загрузить Телефоны, адреса, платежные реквизиты из 1С в ТС.
Контрагент создаётся, при загрузке создаются элементы видов телефонов и адресов, а сами значения не грузятся. почему не понятно.
Настраивал на основе этого видео.
Но там как-то отрывисто рассказывается и в первый раз вообще адреса не загрузились, а потом вроде без ошибок, но результат не показали.

В итоге вроде с виду выглядит всё как надо, результата нет.
Адреса просто не создаются.
С телефонами выдаёт ошибку.
Ошибка импорта. Could not convert variant of type (OleStr) into type (Boolean). Возникла при импорте записи 1C с именем Нова ОсОО Телефон Мобильный

Ещё конечно порадовало "Добавлен новый Елемент")))

Скрины приложил.

Нравится

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

Сложно сказать о конкретных причинах, не видя Ваши 1С и Terrasoft.
Слово «елемент» можно исправить в 47 строке scr_Dataflow1CConsts. И заодно в другом сообщении в 20 строке scr_MsxmlUtils.dash2
Ошибка «Could not convert variant of type (OleStr) into type (Boolean)» говорит, что пытаетесь загрузить строку в логическое поле.

Да мне то "елемент" не мешает, исправлять это в релизе надо. а не в одной копии программы.

1С и ТС вроде у всех одинаковые. 1С УТ 10.3.35.1. Как посмотреть точную версию ТС не знаю.
От того какие там буковки в адресах и телефонах, по моему ничего не меняется.
А настройки обмена, отборы и сопоставление полей я привел на скринах. По всей видимости проблема в них, но где именно не понятно.

"Корниленко Роман Васильевич" написал: исправлять это в релизе надо. а не в одной копии программы.

Роман, разработка 3.Х прекращена, на ней больше релизов не будет.
1С и ТС вроде у всех одинаковые.

Да нет, вроде, у всех разные.

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

"Зверев Александр" написал:Роман, разработка 3.Х прекращена, на ней больше релизов не будет.

Ну ок.
"Зверев Александр" написал:Да нет, вроде, у всех разные.

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

"Корниленко Роман Васильевич" написал:Что Вы подразумеваете под разные?

В разных версиях Terrasoft для работы с разными версиями 1С могут потребоваться определённые доработки в конфигурации.

"Зверев Александр" написал:Сложно сказать о конкретных причинах, не видя Ваши 1С и Terrasoft.

"Зверев Александр" написал:В разных версиях Terrasoft для работы с разными версиями 1С могут потребоваться определённые доработки в конфигурации.
Версию 1С я написал, платформа 8.2.19.130, как посмотреть версию ТС просьба подсказать.

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

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

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

Необходимо установить валидацию на заполнения полей детали средства связи тип телефон
validateField: function(value) {
var invalidMessage = "";
var communicationType = this.get("CommunicationType");
if (communicationType) {
if (CommunicationUtils.isEmailType(communicationType.value) && !Ext.isEmpty(value) &&
!EmailHelper.isEmailAddress(value)) {
invalidMessage = resources.localizableStrings.WrongEmailFormat;
} else if (CommunicationUtils.isPhoneType(communicationType.value) &&
!this.isPhoneNumber(value)) {
invalidMessage = resources.localizableStrings.WrongPhoneFormat;
} else if (CommunicationUtils.isSkypeType(communicationType.value) && !Ext.isEmpty(value) &&
!this.isSkypeAddress(value)) {
invalidMessage = resources.localizableStrings.WrongSkypeFormat;
}
}
return {
fullInvalidMessage: invalidMessage,
invalidMessage: invalidMessage
};
},

это метод из модуля BaseCommunicationViewModel, переопределил этот метод в замещающей странице, но никак изменений на странице контактов не происходит:)

Нравится

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

так же есть еще метод isPhoneNumber: function(value) {
var phonePattern = /^[^'|^`]*$/;
return phonePattern.test(value);
},

Евгений, добрый день.

Насколько я понимаю, Вы замещали ViewModel, что в принципе не есть хорошей практикой, да и если это и делать, необходимо полностью переносить код из базовой реализации. Рекомендую Вам создать замещающую схему для самой детали, и в:
this.addColumnValidator("Number", newItem.validateField, newItem);
и вместо validateField вызывать свою реализацию.

"Мотков Илья" написал:

Евгений, добрый день.

Насколько я понимаю, Вы замещали ViewModel, что в принципе не есть хорошей практикой, да и если это и делать, необходимо полностью переносить код из базовой реализации. Рекомендую Вам создать замещающую схему для самой детали, и в:

this.addColumnValidator("Number", newItem.validateField, newItem);

и вместо validateField вызывать свою реализацию.


спасибо за совет:)

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

Добрый день!
Есть одна очень неприятная проблема.

Есть 10 пользователей в Террасофте.
Есть 2 общие почты, к которым эти пользователи подключены (разрешено многопользовательское использование)

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

Очень срочный вопрос.

Нравится

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

Михаил, а какая версия системы Terrasoft и какая почтовая программа используется?

7.8

Стандартный Google Mail

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

Рекомендую ознакомиться с темой Синхронизация общего почтового ящика.
Там Вы сможете найти ответ на ваш вопрос.

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