Имя: Пароль:
1C
 
Ошибка при вызове метода контекста (ИзменитьРеквизиты)
,
0 falselight
 
17.09.19
03:58
В договоре контрагентов есть поле ТипДополненияДоговора, при создании договора и перевыборе этого поля
выходит ошибка. Из за чего эта ошибка и как её устранить?



{ОбщийМодуль.УправлениеДополнениямиДоговоровПБ.Модуль(32)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
    Форма.ИзменитьРеквизиты(Реквизиты);
по причине:
Неуникальное имя реквизита. Имя: "ИспользоватьДопСведения"

по причине:
Неуникальное имя реквизита. Имя: "ИспользоватьДопСведения"


Неуникальное имя реквизита. Имя: "ИспользоватьДопСведения"
{ОбщийМодуль.УправлениеДополнениямиДоговоров.Модуль(65)}:            Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
{ОбщийМодуль.УправлениеДополнениямиДоговоров.Модуль(113)}:        ПриСозданииНаСервере(Форма, ТекущийОбъект, ИмяЭлементаДляРазмещения);
{ОбщийМодуль.УправлениеДополнениямиДоговоров.Модуль(230)}:            ПриЧтенииНаСервере(Форма, Объект);
{Справочник.ДоговорыКонтрагентов.Форма.ФормаЭлемента.Форма(160)}:    УправлениеДополнениямиДоговоров.ДополнительныеСведенияПриИзменении(ЭтотОбъект, ИмяЭлемента);
{Справочник.ДоговорыКонтрагентов.Форма.ФормаЭлемента.Форма(99)}:    ВызовОбработчикаПриИзменении(Элемент.Имя);

по причине:
Неуникальное имя реквизита. Имя: "ИспользоватьДопСведения"
1 falselight
 
17.09.19
04:08
Ошибка на строке Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
Туда передается массив, там все элементы уникальны.



// Создает основные реквизиты и поля формы, необходимые для работы.
// Вызывается из обработчика ПриСозданииНаСервере формы объекта справочника ДоговорыКонтрагентов
//
// Параметры:
//  Форма       - УправляемаяФорма - в которой будут отображаться дополнительные реквизиты.
//
//  Объект      - ДанныеФормыСтруктура - СправочникОбъект.ДоговорыКонтрагентов.
//
//  ИмяЭлементаДляРазмещения - Строка - имя группы формы, в которой будут размещены свойства.
//
Процедура ПриСозданииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения) Экспорт
    
    Если Объект.ТипДополненияДоговора = Перечисления.ТипыДополненияДоговоров.БезДополнений Тогда
        
        Возврат;
        
    Иначе
        
        ДобавляемыеРеквизиты = Новый Массив;
        СоздатьДополнительныеОбъектыФормы(Форма, ИмяЭлементаДляРазмещения, ДобавляемыеРеквизиты);
        
        ИмяМодуля = ПараметрыСеанса.СоответствияОбработчиковДополненийДоговоров.Получить(Объект.ТипДополненияДоговора);
        Если ИмяМодуля <> Неопределено Тогда
            МодульУправленияДополнениями = ОбщегоНазначения.ОбщийМодуль(ИмяМодуля);
            МодульУправленияДополнениями.ПриСозданииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения, ДобавляемыеРеквизиты);
        Иначе
            Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
        КонецЕсли;
    
        Форма.ИспользоватьДопСведения = Истина;
        Форма.ДопСведения_ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения;
        
    КонецЕсли;
    
КонецПроцедуры
2 ppa32
 
17.09.19
04:08
Уважаемый, я бы посоветовал заюзать отладчик, и посмотреть, что там происходит. Тебе даже в ошибке написано, где расставлять точки останова.
3 ppa32
 
17.09.19
04:10
Есть мнение, что вот тут

{ОбщийМодуль.УправлениеДополнениямиДоговоровПБ.Модуль(32)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
    Форма.ИзменитьРеквизиты(Реквизиты);

в переменной "Реквизиты" вот эта фигня "ИспользоватьДопСведения" у тебя встречается несколько раз.
4 falselight
 
17.09.19
04:22
(2) Так я же смотрю. (1) Туда передается массив, в нем все элементы уникальны.
Не понимаю, вот и спросил. Благодарен если кто подскажет. Куда продвинуться, и начать выявлять.
5 falselight
 
17.09.19
04:30
(3) Если бы я увидел что несколько раз там, задумался бы. И стал искать как это поправить. Но там это все уникально.
6 ДенисЧ
 
17.09.19
05:25
Я буду неоригинальным... Но вдруг на форме уже есть такой реквизит?
7 falselight
 
17.09.19
05:27
Это происходит если при создании на сервере я делаю эту строку

Элементы.ТипДополненияДоговора.СписокВыбора.Добавить(Перечисления.ТипыДополненияДоговоров.ПоОбращениюСОтходами);

Если её нет, то нет этого значения в списке выбора, но и ошибки нет при выборе значений что есть.
Как открываю добавление этой строки, идет ошибка.
8 falselight
 
17.09.19
07:05
(6) А если он там уже есть, каково должно быть поведение ? Почему так работает?
9 ДенисЧ
 
17.09.19
07:20
(8) Он так работает, потому что он там уже есть. И это правильное поведение. Я бы на месте 1с ещё и линейкой по рукам надавал бы.
10 falselight
 
17.09.19
07:24
(9) Так код то типовой. Я лишь добавляю перечисление в список выбора (7)
И в предприятии создаю договор, и меняю значения ТипДополненияДоговора
смотрю поведение формы, но начинает идти эта ошибка. Я не знаю как её устранить, если весь
функционал типовой.
11 falselight
 
17.09.19
09:31
Вот

Форма.ИзменитьРеквизиты(Реквизиты);

В массиве Реквизиты есть элемент ИспользоватьДопСведения

Если смотреть в отладчике Форма, он есть там тоже. И в чем суть ошибки? Как её устранить, что сделать?

http://joxi.ru/D2PlR54CqyJRk2
12 Мимохожий Однако
 
17.09.19
09:46
Перед кодом Форма.ИзменитьРеквизиты(Реквизиты);
добавь процедуру проверки уже имеющихся реквизитов
13 ДенисЧ
 
17.09.19
09:49
(11) Попробуй себя устранить...
14 falselight
 
17.09.19
10:36
(13) Только что подумал.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.