Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 окт 2024, 09:23

Не уникальное имя реквизита

Автор SkyNetYar, 06 июл 2015, 11:37

0 Пользователей и 1 гость просматривают эту тему.

SkyNetYar

Добрый день!
Делаю обработку,корректировка номенклатуры ,вылетает ошибка
{Форма.Форма.Форма(597)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
ИзменитьРеквизиты(МассивРеквизитов, ДобавленныеРеквизиты.ВыгрузитьЗначения());
по причине:
Неуникальное имя реквизита. Имя: "ДрагоценныеМатериалы"


Вот кусок обработки:

//Доп реквизиты
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                | ДополнительныеРеквизитыИСведения.Наименование КАК Наименование,
                | ДополнительныеРеквизитыИСведения.Ссылка,
| ДополнительныеРеквизитыИСведения.ТипЗначения
|ИЗ
                | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
                |ГДЕ
                | ДополнительныеРеквизитыИСведения.НаборСвойств = &НаборСвойств";
Запрос.УстановитьПараметр("НаборСвойств",Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура_Общие);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
пИмяКолонки = ЗаменитьНедопустимыеСимволыВИмениФайла(ВыборкаДетальныеЗаписи.Наименование,"");
//пИмяКолонки = СтрЗаменить(ВыборкаДетальныеЗаписи.Наименование, " ", "");
РеквизитФормы = Новый РеквизитФормы(пИмяКолонки,ВыборкаДетальныеЗаписи.ТипЗначения, ТаблицаЭлемент.Имя, ВыборкаДетальныеЗаписи.Наименование);
Если МассивИменРеквизитов.Найти(пИмяКолонки) = Неопределено Тогда
МассивРеквизитов.Добавить(РеквизитФормы);
МассивИменРеквизитов.Добавить(Колонка.Имя);
КонецЕсли;
КонецЦикла;
//Доп реквизиты
ИзменитьРеквизиты(МассивРеквизитов, ДобавленныеРеквизиты.ВыгрузитьЗначения());
ДобавленныеРеквизиты.Очистить();


Это возникает когда начинаю добавлять отбор по группе,если без отбора то список товаров появляется нормально.

Rasty

а по моему все логично, такое имя реквизита уже есть/уже добавлено, задайте другое имя
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

SkyNetYar

Цитата: Rasty от 06 июл 2015, 13:37
а по моему все логично, такое имя реквизита уже есть/уже добавлено, задайте другое имя
А как поправить? подскажите не допетриваю что то ...
Как то надо очищать предыдущий отбор ?

Rasty

перед тем как вы создаете реквизиты, посмотрите в отладчике какие реквизиты у вас есть, а чтоб вообще не мучиться, давайте им именна Имя +"1", тогда точно не будет таких проблем
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

SkyNetYar

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

Вот что дальше в коде:
//добавляем элементы управления
Для Каждого Реквизит Из МассивРеквизитов Цикл

Если Реквизит.ТипЗначения.СодержитТип(Тип("ТаблицаЗначений")) Тогда
Продолжить;
КонецЕсли;

Если Реквизит.Имя = "ДополнительныеРеквизиты" Тогда

Иначе
ДобавленныеРеквизиты.Добавить(Реквизит.Путь + "." + Реквизит.Имя, Реквизит.Заголовок, Истина);
Элемент = Элементы.Добавить(ТаблицаЭлемент.Имя + Реквизит.Имя, Тип("ПолеФормы"), ТаблицаЭлемент);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПутьКДанным = ТаблицаЭлемент.Имя + "." + Реквизит.Имя;
Элемент.ВыбиратьТип = Ложь;
Если Найти("Код", Реквизит.Имя) Тогда
Элемент.ТолькоПросмотр = Истина;
Иначе
Элемент.ТолькоПросмотр = Ложь;
КонецЕсли;
ДобавленныеЭлементы.Добавить(Элемент.Имя);
КонецЕсли;
КонецЦикла;

//заполнение данными
РедТЗ = РеквизитФормыВЗначение(ТаблицаЭлемент.Имя);
РедТЗ.Очистить();
Для Каждого Стр ИЗ ТЗ Цикл
НовСтр = РедТЗ.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр, Стр);
НовСтр.ЗаменитьНа = Справочники.Номенклатура.ПустаяСсылка();

НовСтр.Выбрать = Истина;

Если ОбъектПоиска = Неопределено Тогда
Продолжить;
КонецЕсли;

Если ОбъектПоиска.Тип = "Справочник" Тогда
Если Стр.Объект.ЭтоГруппа Тогда
Если Стр.Объект.ПометкаУдаления Тогда
НовСтр.Картинка = БиблиотекаКартинок.Папка;
Иначе
НовСтр.Картинка = БиблиотекаКартинок.Папка;
КонецЕсли;
Иначе
Если Стр.Объект.ПометкаУдаления Тогда   
НовСтр.Картинка = БиблиотекаКартинок.ПометитьНаУдаление;
Иначе
НовСтр.Картинка = БиблиотекаКартинок.ПустаяКартинка;
КонецЕсли;
КонецЕсли;
Иначе
Если Стр.Объект.Проведен Тогда
НовСтр.Картинка = 7;
ИначеЕсли Стр.Объект.ПометкаУдаления Тогда
НовСтр.Картинка = 8;
Иначе
НовСтр.Картинка = 6;
КонецЕсли;
КонецЕсли;
КонецЦикла;

ЗначениеВРеквизитФормы(РедТЗ, ТаблицаЭлемент.Имя);

Rasty

сохраните куда нибудь имена созданных вами реквизитов, а перед заполнением удалите их
ну или вставьте в имя какой нибудь определитель чтобы все имена реквизитов, которые вы создали, вы смогли отличить.
я добавляю в имена реквизитов строку перед ним "мрк" + Имя, а потом перебором ищу их Если СтрНайти(ИмяРеквизита,"мрк") > 0 Тогда
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск