При перезагрузке существующих карточек сущности "Объект недвижимости" карта появляется не внизу экрана, как должно быть, а всплывающим окном.
Как исправить ошибку?

Нравится

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

Проблема решилась. Ошибка возникла из-за удаления унаследованной группы "Адреса", к которой была привязана карта.

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

Доброго дня.
Столкнулся с проблемой:
Необходимо перегнать значения из строкового поля в blob поле, но при запуске скрипта выдает ошибку
"Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом"

function Main()
{  
        var TaskDataset = Services.GetNewItemByUSI('ds_Task');
        EnableDatasetFilters(TaskDataset, false);
        var ID = '{332C64BC-245B-4A08-B345-C392F4A8FCFF}';
        ApplyDatasetFilter(TaskDataset, 'ID', ID, true);
        TaskDataset.Open();
        while(!TaskDataset.IsEOF)
        {
                var Detalization = TaskDataset('Detalization');
                var Stream = new ActiveXObject('ADODB.Stream');
                Stream.CharSet = 'windows-1251';
                Stream.Mode = 3;        
                Stream.Type = 2;
                Stream.Open(Detalization);
                var Field = TaskDataset.DataFields.ItemsByName('DetalizationRich');
                Field.SetValAsBlob(Stream);
                Stream.Close();        
                TaskDataset.GotoNext();        
        }      
        TaskDataset.Post();
        TaskDataset.Close();
}

В чем может быть проблема? Заранее спасибо

Нравится

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

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

Сообщение говорит, что не правильно открываете Stream.

Пример записи значения поля [ФИО] Контакта на деталь [Описание] раздела Контакты:

	var ID = '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}';
 
	var ContactDataset = Services.GetNewItemByUSI('ds_Contact');
	EnableDatasetFilters(ContactDataset, false);    
    ApplyDatasetFilter(ContactDataset, 'ID', ID, true);
    ContactDataset.Open();
 
    var DescriptionDataset = Services.GetNewItemByUSI('ds_Description');
	ApplyDatasetFilter(ContactDataset, 'ID', ID, true);
 
	var SubjectSelectQuery = ContactDataset.SelectQuery;
	var DetailSelectQuery = DescriptionDataset.SelectQuery;
	var FromTable = SubjectSelectQuery.Items(0).FromTable;
	DetailSelectQuery.Items(0).FromTable = FromTable;
	DescriptionDataset.Open(); 
 
    var FieldName = ContactDataset.DataFields.ItemsByName('Name');
    var FieldDescription = DescriptionDataset.DataFields.ItemsByName('Description');
 
 
    var Stream = new ActiveXObject('ADODB.Stream');
	Stream.CharSet = 'windows-1251';
    Stream.Mode = 3;
    Stream.Type = 2;
	Stream.Open();
    Stream.Position = 0;
    Stream.WriteText(FieldName.Value); 
 
    DescriptionDataset.Edit();
    FieldDescription.SetValAsBlob(Stream);
    Stream.Close();
    DescriptionDataset.Post();
 
    DescriptionDataset.Close();
    ContactDataset.Close();

Результат:

Cпасибо большое!
Теперь все работает, правда если я хочу перегнать все записи, то выдает ошибку "Out of memory"
Можно с этим как то бороться?

Попробуйте вызывать функцию CollectGarbage(0.001);
Выполняйте Post() в цикле, а также создание Strem-а вне цикла.

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

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

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

Т.е. работают 4 фильтра в наборе объединенные оператором AND:
1) Проверяется, что статус ≠ выполнена;
2) Проверяется, что поле “Документ” не пусто;
3) Проверяется существование указанном в задаче документе наличие положительной визы руководителя направления;
4) Проверяется отсутствие в данном документе виз с пустым полем “Установил” или неположительным результатом визирования.

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

а) Включены все фильтры – кол-во записей в представлении 14;
б) Включены фильтры 1 и 2 и 3 – кол-во записей в представлении 14;
в) Включены фильтры 1 и 2 и 4 – кол-во записей в представлении 20;
г) В ситуации, когда включен только 3 фильтр - кол-во записей в представлении 0 (НОЛЬ!);

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

Может кто-то сталкивался с подобным и сможет подсказать, в чем дело.

Нравится

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

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

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

Добрый день, коллеги.
Обнаружили у себя следующую проблему - на событии при создании звонка OnCallCreatedEvent(Call) мы случайным образом время от времени получаем пустые данные в объекте, в частности, не заполняется свойство AbonentCallInfoStr, Number и т.д.
Свойство ID заполнено всегда.
Для нас это является большой проблемой, т.к. по свойству AbonentCallInfoStr определяем идентификатор карточки обращения клиента.
Со своей стороны перебрали кучу возможных случайных вариантов, чтобы получить свойство:
Ожидание этого свойства в цикле while, инициализация карточки через другие события, например, OnStateChangedEvent, и т.д.
Мы всё равно имеем то, что Call обновляется случайным образом, притом, если он на событии инициализации вызова может быть пустым, то, например, на событии OnCommandsStateChangedEvent(Call) он может быть уже заполненным, а может и не быть.
Непонятно, каким образом кэшируется/обновляется объект, т.к. 100% в цикле одной функции при его начальном отсутствии дождаться его невозможно, а на входе другой функции он может появиться.
Прошу помочь разъяснениями тех, кто сталкивался с подобной ситуацией.

Terrasoft 3.4
Infinity 1.15.11.8315

Нравится

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

Добрый день!

К сожалению не смог найти в базовых сервисах описанных Вами событий: OnCallCreatedEvent, OnCommandsStateChangedEvent.

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

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

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

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

Версия 3.3.2.311.

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

Нравится

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

Вот обсужение аналогичного вопроса. На изменение в датасете карточки поля «Контакт» вычисляем для него значение адреса и пишем в нужное поле. В Вашем случае действовать аналогично, различие только в том, что адрес в карточку (а точнее, в поле датасета) будет писаться только для отображения и реально в этой таблице не хранится. А тут немного другая, но похожая задача, если контакту на ходу изменили адрес.

Использовал такой код для реализации данной задачи, может кому пригодиться:

var ContactSelectQuery = Services.GetNewItemByUSI('sq_Contact');
EnableSelectQueryFilters(ContactSelectQuery, false);
ApplySelectQueryFilter(ContactSelectQuery, 'ID', ContactID, true);
var ContactDataset = ContactSelectQuery.Open();
Dataset.Values('ContactAddress') = ContactDataset.Values('Address');

Еще в конце тогда уж

ContactDataset.Close();
Показать все комментарии

Доброго дня.
Дорогие форумчане, подскажите пожалуйста. Необходимо реализовать автоматическую подпись на вкладке "Ход задачи" (например: "Тестовый Сергей Сергеевич - 27 июля 2016 г. 14:22:00")
Я уже реализовал на страничке "Описание задачи" вот только там RichDataControl
а Ход задачи - MemoDataControl.
Заранее спасибо.

Нравится

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

Если Вы хотите при каждой правке текста в поле добавлять туда какие-то дополнительные данные, то можно завязаться на событие DataChange датасета, добавив ветвь с этим полем в обработчик dlDataOnDatasetDataChange на уровне карточки задачи или аналогичную SelfOnDatasetDataChange на уровне объекта датасета ds_Task. Главное при этом не получить вечную рекурсию, когда программное добавление текста вызовет повторное срабатывание.

Имя текущего пользователя получается в коде как CurrentUser.ContactName, дата — System.Now().

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

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

Подскажите как правильно сделать:

Есть простой fr (sq + ds) отчет который выводит все Счета.
Хочу установить фильтр (в sq)

WHERE([tbl_vwInvoiceManager].[ContactID] = :ContactID)

, чтобы менеджеры при открытии отчета видели только свои Счета.
На какое событие в ds установить:

ApplyDatasetFilter(ds_InvoiceManager, 'ContactID', ContactID, true);

К примеру, как передать параметр :ContactID в sq (см. рисунок) для фильтра (на какое событие ds скрипта?). Пробовал разные варианты, но фильтрации не происходит. Если же в самом фильтре (в sq)прописать значение для параметра , то фильтр срабатывает.

Как правильно реализовать данный пример?

Нравится

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

Попробуйте применять фильтр в обработчике события OnDatasetBeforeOpen Вашего датасета для отчета:

var ContactID = Connector.CurrentUser.ContactID;
ApplyDatasetFilter(ds_InvoiceManager, 'ContactID', ContactID, true);

"Савельева Алла" написал:

Попробуйте применять фильтр в обработчике события OnDatasetBeforeOpen Вашего датасета для отчета:

var ContactID = Connector.CurrentUser.ContactID;

ApplyDatasetFilter(ds_InvoiceManager, 'ContactID', ContactID, true);


Именно так я и делал, но при ds_InvoiceManager.Open(); цикл опять повторяется в данном обработчике и открытие отчета FastReport не происходит.
В случае, если это не отчет FR, то все нормально срабатывает.

Спасибо, вопрос решился.

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

Караул!!!
Несколько дней назад синка сломалась, писало "Out of memory". Долго бился в стенку пока не проверил историю синхронизаций, там было 1 645 624 записей!!!! я сократил до 13 000. теперь при экспорте контрагентов пишет "List index out of bounds". Ошибка вываливается в разных местах, иногда при сохранении записи на дели истории, иногда при открытии настроек синки, иногда при открытии настройки соответствия полей. Синка полностью выведена из строя, клиент в бешенстве, я уже не знаю что делать!

Вот одно из мест ошибки

function GetFullObjectParam(ObjectID, Obj1C, SynType, ErrorsIsNotAcepted,
        Version, DataflowID, Dataset1CObject) {
        if (!Assigned(Dataset1CObject)) {
                Dataset1CObject = GetSingleItemByCode('ds_1CObject', 'GetFullObjectParam');
                EnableDatasetFilters(Dataset1CObject, false);
                ApplyDatasetFilter(Dataset1CObject, 'ID', ObjectID, true);
                Dataset1CObject.Open();

в строке Dataset1CObject.Open(); выбивает ошибку, посмотрел SQLText и проверил его в скл менеджере - работает нормально, выбрало нужную запись, в коде - ошибка.
кеш чистил, СКЛ сервер перезагружал. какие есть идеи? Нужно срочно это исправить
версия: xrm 3.4.0.130

Нравится

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

Я бы начал с анализа сервиса ds_1CObject и сервиса его запроса (sq_), может какая колонка слетела.
Плюс избавился бы для эксперимента от GetSingleItemByCode, заменив на Services.GetNewItemByUSI, хотя бы временно

только что в новом месте ошибка выскочила:

function GetAreRemindingsExist() {
	Main.RemindingsDataset.Close();
	var SelectQuery = Main.RemindingsDataset.SelectQuery;
	var PrimarySelect = GetSelectQueryPrimarySelect(SelectQuery);
	EnableFilter(PrimarySelect.Filters, 'ContactID', true);
	var ContactParameter = SelectQuery.Parameters.ItemsByName('ContactID');
	ContactParameter.ValAsGUID = Connector.CurrentUser.ContactID;
	EnableFilter(PrimarySelect.Filters, 'RemindTime', true);
	var RemindTimeParameter = SelectQuery.Parameters.ItemsByName('RemindTime');
	var today = new Date(System.Now());
	RemindTimeParameter.Value = today.getVarDate();
	Main.RemindingsDataset.Open();

вот тут: Main.RemindingsDataset.Open();
Как может вот так в разных местах все слететь???

вот еще одна ошибка:
Ошибка экспорта. Возникла при попытке открытия источника данных Контрагент. Ошибка открытия источника данных "ds_Account".
Оригинальное сообщение об ошибке: List capacity out of bounds (32)

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

А какие запросы идут в базу данных проверяли?
Также рекомендую проверить работает ли синхронизация хотя бы для одной записи.

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

Нечто новое. Делается бекап БД каждый день, я сделал новую бд, залил туда бекап от 1 июля и запустил на других бинарниках:confused:таже ошибка:confused:... Это что за прикол такой!!!
вот такую ошибку мне показало при попытке экспорта контрагентов:

Main.RemindingsDataset.Open()	List index out of bounds (3)

Здесь ошибка в напоминаниях, но бывает и при открытии ds_Account

Виталий,

Эта проблема наблюдается только на одной машине или на других тоже воспроизводится?

Попробуйте очистить кеш и профиль пользователя Terrasoft.

"Савельева Алла" написал:

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

А какие запросы идут в базу данных проверяли?

Также рекомендую проверить работает ли синхронизация хотя бы для одной записи.

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


записи проверял - нормальние, в скл работают
даже длня лной не работает

тут дело в том что ошибка вылетает независимо от версии базы(свежая или 2 недели назад) и бинарников. Проблема кроется гдето на компе, что же может выдавать такую ошибку?

Сегодня создал новую настройку в интеграциях, взял раздел счета, выбило первоначальную ошибку Out Of Memory!!! в чем же может быть ошибка? А еще иногда после появления ошибки клиент закривается

То есть проблема наблюдается в разных местах системы, на разных бинарниках и базах, но на одном ПК?
Может, на этом компьютере памяти не хватает или она битая?

"Зверев Александр" написал:Может, на этом компьютере памяти не хватает или она битая?

перенесли. Теперь ошибка "list index of bounds(0)" выбивает в разделах контрагенты и контакты при сохранении карток... Какие у кого еще идеи есть??? везде выбивает на моменте сохранение Dataset

Это решил, прописал sp_change_users_login 'update_one', 'fkeys', 'fkeys' и ошибка пропала.
Еще вопрос. Сделал импорт одного контрагента и очень долго думало, гдето 2-3 мин а потом предложило загрузить метаданные, я нажал нет и оно опять 1-2 минуты подумало, сказало что недостаточно памяти и выбило ТС.
Как сократить это время "думания" ТС??? Для одной записи слишком долго думает...

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

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

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

Контрагентов всего 6 тысяч, много раз просматривал отладчиком код, ТС просто закрывается без предупреждения в разных местах кода... Раньше ошибки выскакивали о недостатках памяти при открытии какого-то Dataset. Востанавливались разные бекапы на разних системах и ПК и везде одинаковые ошибки в ТС. И тут сделал синку с очень старой базой 1С и о чудо ошибок нет...
Оперативы стоит 16 гигов, в диспетчере она полностью она не задействуется, но выбивает ошибку о недостаче памяти...

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

Ответьте, пожалуйста, на следующие вопросы.

1. Выполнялся ли анализ запросов, которые поступают в базу данных?

2. Выполнялись ли накануне возникновения проблемы какие-то доработки в конфигурации 1С или Terrasoft до того, как произошел сбой?

3. Базы данных Terrasoft и 1С находятся на одном сервере?

4. Выполнялись ли накануне возникновения проблемы какие-то работы на серверах, где находятся 1С и Terrasoft?

5. Синхронизация выполняется под пользователем с правами администратора Terrasoft или под обычным пользователем?

6. Сбой происходит при попытке затянуть данные из 1C в Terrasoft или в обе стороны?

7. Нет ли проблем с работой другой функциональности в Terrasoft?

Также рекоммендую Вам попробовать обновить бинарные файлы Terrasoft до последней версии.

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

Добрый день!
Может у кого была подобная проблема и есть решение?

У нас стала часто возникать проблема с зависанием БД Террасофт

Проблема описывается следующим образом.
Если встать на клиента у которого последнее описание (у нас менеджеры вносят информацию о контакте в описание) сохранилось не корректно то база зависает.
Некорректность сохранения описания выявили через журнал изменений и при открытии последнего файла описания он открывается с трудом с сообщениями что у файла слишком большой размер.
Если в описании удается сохранить новое изменение то зависания по этому клиенту уходят.

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

Как устранять эту проблему?
Возможно есть реестр описаний где можно отфильтровать по размеру и удалить подозрительные?

PS Чистка КЭШа не помогает.

Нравится

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

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

Специального реестра описаний в базовой версии нет.

Дублирую свой ответ, который был предоставлен Вам в рамках обращения в службу поддержки.

Причины описанной Вами проблемы могут быть самые разные. Для генерации решения нужно определить её источник (база данных, аппаратное обеспечение сервера или клиентские места). В момент возникновения замедлений проверить у всех ли пользователей это происходит одновременно. Если «да», то обратить внимание на сервер, в частности, на загрузку ЦП и оперативной памяти. Если там всё в порядке, тогда нужно моделировать ситуацию и в это время с помощью утилиты «SQL Server Profiler» пробовать отследить проблемные запросы к базе для возможности их оптимизации. Следующий этап – это проанализировать зависит ли замедление от пользователя, админ\не админ (играют ли роль права доступа). На скорость работы (время отклика системы), также, может влиять количество колонок, которые отображаются в реестре записей (желательно лишние спрятать), наличие сортировки по каким-то из полей реестра (убрать сортировку можно зажав Ctrl и кликнув по полю).

Со временем может быть нарушена структура индексов базы данных (создаются для ускорения выборки данных). Их можно перестроить при помощи скрипта Reindex.rar (во вложении). Рекомендации по выполнению скрипта – во вложении. После выполнения скрипта создаётся хранимая процедура «sp_reindex_all_tables». Её нужно запустить на выполнение. В зависимости от количества индексов, размера базы данных и ресурсов сервера выполнение данной процедуры может занять достаточно продолжительное время при этом нагружая сервер. В связи с этим, если вы будете пересоздавать индексы, рекомендую запускать процесс, когда пользователи не работают с системой. Перед этим обязательно создайте резервную копию базы данных.

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

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

Появилась идея удалить последнюю запись обновления из Журнала изменений, но не знаем как это сделать.

"Пушкарев Алексей" написал:Реиндексацию делали

Реиндексация для оживления описания это забавный шаг :) поле blob как бы не индексируют, и смысла ускорять реиндексацией его чтение ноль

Просто sql запрос на сервере select * from tbl_Account where Name = 'Как_там_называется_проблемный_клиент' работает?

Если работает - как, время профайлером гляньте, долго-долго?

Сегодня сделали поиск проблемных клиентов с изменениями за последние 3 месяца. все клиенты одного менеджера причем последняя дата изменения у всех после перевода менеджера с Windows 7 на 8 версию. И ошибки лишь на 8 контрагентах, но так как они периодически становятся первыми в общем списке и у всех по умолчанию открыта деталь описание то страдают все.

Наверное пока не стоит связывать переход пользователя с Windows 7 на Windows 8.

Из Вашего сообщения сделал выводы, что на детали [Описание] хранится много информации, где размер поля может превышать более 10 мб. В таком случае рекомендую изменить логику работы приложения, а именно:

  • Использовать FILESTREAM
  • Использовать таблицы FileTable
  • Создать новую деталь, где будет использоваться RTF файл, который размещается на файловой системе
Показать все комментарии

Добрый день! Создали и настроили свой новый раздел планирования, но при создании в мастере не выбран признак "Администрируется" (рис. master_redaktirovaniya) и сейчас раздел виден всем пользователям, возможно потому, что все таблицы создавались вручную, и теперь права на раздел регулировать через Администрирование не получается. Подскажите, пожалуйста, как можно восстановить\создать связь этого раздела с администрированием или возможно есть другие варианты настройки отображения уже настроенного раздела? Также интересно каким образом можно удалить не нужные разделы, что бы больше они не отображались в администрировании (рис. prava_na_razdely).

Нравится

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

Откройте Terrasoft Administator и найдите свою таблицу tbl_VipPlanning. Откройте ее, после чего установите признак [Администрируется по записям] и сохраните таблицу из сохранением в БД.

В разделе [Администрирование], закладки [Права доступа к группам таблиц] присутствует кнопка [Удалить], с ее помощью можете удалить необходимую запись.

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

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

Здравствуйте, Антон Сергеевич!

Попробуйте очистить кеш: %AppData%\Roaming\Terrasoft\3.4.1\Cache.

Если после чистки кеша программы проблема останется, то попробуйте ещё удалить профиль: %AppData%\Roaming\Terrasoft\3.4.1\Profile.
Если профиль пользователя хранится в базе данных, тогда для тестового пользователя нужно очистить записи в таблице tbl_ProfileData.

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

Профиль пользователя пуст и кеш тоже, как и всех остальных, мы тестируем на тестовом сервере...

Может, в таблицах раздела, который создали вручную, не прописана или прописана не везде группа таблиц? Сравните в «Администраторе» таблицы в этом и в каком-то стандартном разделе, всё ли сделано аналогично.

Спасибо большое! Неправильно была указана группа таблиц

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