карты
Технические вопросы
Разработка

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

Нравится

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

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

Показать все комментарии
Blob
скрипт
Скрипты
Разработка

Доброго дня.
Столкнулся с проблемой:
Необходимо перегнать значения из строкового поля в 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-а вне цикла.

Показать все комментарии
filter set
select query
представление реестра
Технические вопросы
Разработка

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

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

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

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

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

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

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

Нравится

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

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

Показать все комментарии
Проблема с объектом звонка Infinity на событии OnCallCreatedEvent(Call)
Интеграция и импорт данных
Разработка

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

Terrasoft 3.4
Infinity 1.15.11.8315

Нравится

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

Добрый день!

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

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

Показать все комментарии
Отображение данных из одного dataset`а
Технические вопросы
Разработка

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

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

Версия 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, то все нормально срабатывает.

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

Показать все комментарии
List index out of bounds
Технические вопросы
Разработка

Караул!!!
Несколько дней назад синка сломалась, писало "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.

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

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

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

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

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