Доброго дня.

Существует деталь "Продукты в заказе". В ней отображены группы, в которых настроены несколько фильтров, и согласно которым подбираются продукты.

После выбора группы и прокрутки отобразившегося списка продуктов, в консоли выводятся запросы, которые система направляет в БД.

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

Получается, что система всё-равно пытается найти подходящие продукты, отчего система принимает на 1-2 секунды режим загрузки.

Почему так происходит и должна ли по логике система слать запросы в БД, если все продукты группы уже загружены?

Нравится

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

Доброе утро.

Это на последней версии наблюдается такое поведение системы?

Алла Савельева,

доброго дня, Алла.

Версия 7.13.1.769

Не совсем понятно, о каких «запросах в БД», которые «выводятся в консоли» речь. Вы имеете в виду «Инструменты разработчика» в браузере или профайлер из MS SQL?

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

Зверев Александр,

На сегодняшний день актуальной текущей версией является 7.14.4, поэтому лучше проверять сразу на ней.

Дарья Сошина пишет:

Версия 7.13.1.769

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

Алла, спасибо, когда заказывал демку, её ещё не давали. Сейчас, по идее, совсем скоро должна уже 7.15 появиться.

Зверев Александр,

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

Алла Савельева,

Попробовала на демке 7.14.4. Индицент не повторился. В действительности, как Александр подметил, была доработка окна выбора.

Зверев Александр пишет:

Не совсем понятно, о каких «запросах в БД», которые «выводятся в консоли» речь. Вы имеете в виду «Инструменты разработчика» в браузере или профайлер из MS SQL?

В консоли браузера при скролле наблюдала формирование запросов. 

Могла ли доработка так повлиять на поведение системы и можно ли это как-то проверить?

Могла, конечно. Мы же не знаем, что это за доработка. Проверить можно, оставив Вашу  7.13 без неё (например, подняв старый бекап и подключив сайт к нему) или накатываем доработанных схем на 7.14.

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

Коллеги, добрый день! С чем может быть связана проблема, что при запуске импорта (12, 5 тыс строк всего то) импорт просто висит часами на 0% и ничего не происходит.

Маленькими порциями (10) этот пакет заходит.

 

 

Нравится

3 комментария
Лучший ответ

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

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

Если маленькими порциями импортуется то возможно на какой то записи затыкается? Нужно смотреть логи импорта и потом возможно дебажится. Или внимательно просмотреть источник данных для импорта, скорее всего эксель, может что то бросится в глаза!

И просмотрите рекомендации по подготовке файла для импорта данных

 

 

 

Григорий Чех,

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

чется).

 

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

Добрый день, коллеги.

Пытаюсь решить одну проблему и столкнулся со странным поведением системы.

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

Код примерно такой:

var ExlApp = new ActiveXObject("Excel.Application");
var WorkBook = ExlApp.Workbooks.Open(FileName);
var Sheet = WorkBook.Sheets(1);
var BankData = Sheet.UsedRange.Value;
// Вот здесь BankData и есть тот самый массив, но обратится к нему проблематично
// var Value = BankData[2][2] выдает ошибку о том что объект есть null или не является объектом
// да и BankData имеет тип Unknown. Хотя в студии его структура видна и данные как бы есть.

WorkBook.Close(false);
ExlApp.Quit();
delete ExlApp;

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

Нравится

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

Добрый день!
Это не мессив. В MSDN есть вся информация.
Sheet.UsedRange возвращает тип Range
Здесь все об этом типе
Такие вещи очень хорошо поискать снача в MSDN, а после можно найти решение на Stackoverflow

Я не писал что Sheet.UsedRange это массив.
А вот Sheet.UsedRange.Value возвращает массив, с которым чудесно можно работать в Delphi например.
Быстрая обработка данных Excel в Delphi
Благодарю за ссылку на MSDN :)

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

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

Прошу прощения за тавтологию. Пытался описать вопрос обширнее).

Нравится

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

scr_ContactAccountUtils
function FillInformationBySelectedItem(Dataset, LookupDataset, Message)
- это оно. Суть - проста. Говорим откуда тянуть данные, куда писать. Все через датасеты.

ООО "Лайнсервис"
www.ls-crm.ru

А в какой момент фактически инициируется функция заполнения?
Так как она не прикручена ни к контролу ни к датасету

function SelfOnDatasetDataChange(DataField) 

в скрипте scr_Contact

function SelfOnDatasetDataChange(DataField) {
....
if (DataField.Name == 'AccountID') {
  var LookupDataset = DataField.LookupDataset;
  if (!IsEmptyStr(DataField.DisplayValue)) {
	FillInformationBySelectedItem(Dataset,  LookupDataset, DoYouWantToFillContactEntriesMessage);
  }
  return;
}
...
}

при смене значения в поле AccountID
а прикручено оно к ds_Contact
ООО "Лайнсервис"
www.ls-crm.ru

Для начала попытался заполнить текстовое поле "CustomerFIO"(Имя заказчика) на форме Договор способом выбора "CustomerID"(Индификатор контрагента.
Для этого:

1) Добавил в scr_ContactAccountUtils свою функцию

function FillCustomerBySelectedItem(Dataset, LookupDataset, Message) {
    if (System.MessageDialog(Message, mdtConfirmation, mdbYes + mdbNo, 0)
		== mrYes) {
		if (!Assigned(LookupDataset)) {
			return
		}
		if (LookupDataset.State == dstInactive) {
			return
		}
		var ContactIDName = 'CustomerFIO';
   		var ContactID = GetFieldValueFromDisabledField(LookupDataset,
		   		ContactIDName); 
   	    Dataset.Values(ContactIDName) = ContactID;
    	}
}

2) Прикрутил scr_ContactAccountUtils к ds_ContractScript
3) Добавил в ds_ContractScript функцию

function SelfOnDatasetDataChange(DataField) {
	var Dataset = DataField.ParentDataFields.ParentDataset;
try {
	if (DataField.Name == 'CustomerID') {
	var LookupDataset = DataField.LookupDataset;
	if (!IsEmptyStr(DataField.DisplayValue)) {	FillCustomerBySelectedItem(Dataset, LookupDataset, 			DoYouWantToFillCustomerEntriesMessage);
			}
			return;
		}
		} finally {
	}
	DataChange(DataField);
}

4) Добавил в константы: DoYouWantToFillCustomerEntriesMessage
5)

РЕЗУЛЬТАТ: При запуске и выборе Контрагента TSCRM зависает...Не могу определить где она зацикливается.

"Швец Александр" написал:DataChange(DataField);

а вот здесь что происходит, может закомментить это?

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

ООО "Лайнсервис"
www.ls-crm.ru

Чтобы находить нужные функции в скриптах используйте scr_GrepSearch (запустите этот скрипт в администраторе).
Подозреваю, что DataChange(DataField) изменяет значение какого нибудь поля, что в свою очередь вызывает событие SelfOnDatasetDataChange - вот Вам и зацикливание.

Александр и Сергей, спасибо за помощь.
Как оказалось никакого зацикливания не было)).
На самом деле подвисал JIT.
Перезагрузился.
С помощью отладчика нашёл свою ошибку.
Если поля в исходном и результирующем датасете имеют разное название, то необходимо изменить формальный параметр на фактический.
До:

function FillCustomerBySelectedItem(Dataset, LookupDataset, Message) {
    if (System.MessageDialog(Message, mdtConfirmation, mdbYes + mdbNo, 0) == mrYes) {
		if (!Assigned(LookupDataset)) {
			return
		}
		if (LookupDataset.State == dstInactive) {
			return
		}
		var ContactIDName = 'CEO';
   		var ContactID = GetFieldValueFromDisabledField(LookupDataset,
		   		ContactIDName); 
   	    Dataset.Values(ContactIDName) = ContactID;
    	}
}

После:

function FillCustomerBySelectedItem(Dataset, LookupDataset, Message) {
    if (System.MessageDialog(Message, mdtConfirmation, mdbYes + mdbNo, 0)
		== mrYes) {
		if (!Assigned(LookupDataset)) {
			return
		}
		if (LookupDataset.State == dstInactive) {
			return
		}
		var ContactIDName = 'CEO';
   		var ContactID = GetFieldValueFromDisabledField(LookupDataset,
		   		ContactIDName); 
   	    Dataset.Values('CustomerFIO') = ContactID;
    	}
}

В моём случае поле 'СЕО' находится в датасете Контрагента, а поле 'CustomerFIO' в датасете Договора.

А что касается

"Глова Сергей" написал:DataChange(DataField) изменяет значение какого нибудь поля, что в свою очередь вызывает событие SelfOnDatasetDataChange - вот Вам и зацикливание.

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

Находите scr_GrepSearch в администраторе. Нажимаете F9 или кнопочку "запустить скрипт". И пользуетесь таким функционалом для поиска непонятных функций.

"Глова Сергей" написал:Находите scr_GrepSearch в администраторе. Нажимаете F9 или кнопочку "запустить скрипт". И пользуетесь таким функционалом для поиска непонятных функций.

Это я пробовал, но в ответ Error "Метод Main не существует".
Может нужно передать ей какие то параметры?

Прошу меня извинить: по памяти на скрипт указывал. Вам нужен wnd_GrepSearchScript.

"Глова Сергей" написал:Вам нужен wnd_GrepSearchScript.

Большое спасибо.
Как раз этого инструмента и не хватало на поприще исследования структуры TSCRM.

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