Вопрос

Доброго дня!

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

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

Прикрепленные файлы

У меня такой же вопрос

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

По ошибке 1. После какого-то действия, вы пытаетесь добавить в базу данных значение с тем же ID, которое уже существует, соответственно получаете ошибку.
По ошибке 2, уже труднее, что-то сказать, какой-то объект данных, сериализуемый в JSON и переданный далее, не был правильно обработан на принимающей стороне.
Скорее всего он был заполнен данными одного типа, а ожидаются данные другого типа.
Например вы передали this.$Contact в качестве параметра, а ожидался тип Guid, вместо object и чтобы такой ошибки не было, вы должны были бы передать this.$Contact.value

По ошибке 1. После какого-то действия, вы пытаетесь добавить в базу данных значение с тем же ID, которое уже существует, соответственно получаете ошибку.
По ошибке 2, уже труднее, что-то сказать, какой-то объект данных, сериализуемый в JSON и переданный далее, не был правильно обработан на принимающей стороне.
Скорее всего он был заполнен данными одного типа, а ожидаются данные другого типа.
Например вы передали this.$Contact в качестве параметра, а ожидался тип Guid, вместо object и чтобы такой ошибки не было, вы должны были бы передать this.$Contact.value

Литвинко Павел,

Спасибо! 
Парадокс, но первая ошибка возникает при создании новой записи (счет/КП). И ладно бы действительно запись была, но ее нет!

 

Alex Zaslavsky,

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

 

Пикулик Тимур,

да у меня когда-то такое было, и я тогда по-моему принудительно сохранял запись, чтобы сделать копирование на определенные детали и для этого мне приходилось перед копированием сохранять запись с помощью this.save({isSilent: true}); 

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

Пикулик Тимур,

А у вас продажа создается по бизнес-процессу с помощью элемента "Открыть страницу редактирования" или с помощью какой-либо кнопки без запуска БП?

Alex Zaslavsky,

Вручную, путем обращения к детали и нажатию на "+". 

Пикулик Тимур,

что-то у меня не получилось воссоздать проблему годичной давности)

А какая у Вас версия CRM?

Пикулик Тимур,

а вообще, в первую очередь, я смотрел бы в OpportunityPageV2 в пользовательском пакете, не вызывается ли где-нибудь там метод 'save', а так, не знаю чем помочь)

Alex Zaslavsky,

7.12. Спасибо хотя бы за попытку.

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

При создании маски номера столкнулась с задачей автоматически заполнять пустые разряды нулями. Это позволит решить проблему неверной сортировки по номеру (номер - строка).

Решить эту задачу удалось только путем доработки системной функции генерации номера function GenerateSystemNumber(ItemName)

1) Была добавлена системная настройка OpportunityCapacity (целое число).

В функцию были добавлены следующие строки:

    if(MaskName == 'OpportunityMask'){  
                var Num = SystemNumber.toString();
                var Nulls = '';
                var MaskLength = GetSystemParameterValueEx('OpportunityCapacity', true);
                for (i = 0; i (MaskLength - Num.length); i++){
                        Nulls = Nulls + '0';
                }
                if(!IsEmptyValue(Nulls)){
                        Mask = Mask.replace(/\%1/g, (Nulls+'%1'));
                }      
        }        

Вот как выглядит сама функция в итоге:

capacity

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

В принципе, решение можно сделать универсальным для всех генерируемых номеров.

Поделиться

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

Сделать решение универсальным можно следующим образом:

Добавить в начало функции

var CapacityName = FormatStr('%1Capacity', ItemName);

Изменить добавленный код:

var MaskLength = GetSystemParameterValueEx(CapacityName, true);

capacity

Добавить системные настройки запросом в базу данных (в приложении). Обратите внимание, этот запрос будет работать только для XRMDistribution+ServiceDesk, для других продуктов нужно удалить строки, для которых нет разделов.

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