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

программное заполнение ссылки на вновь созданную характеристику номенклатуры

Автор Св Ч, 09 мар 2020, 13:15

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

Св Ч

Добрый день!
создаю новую характеристику номенклатуры ERP управляемые формы
&НаСервере

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

| И ДополнительныеРеквизитыИСведения.Наименование = ""Цвет (Мотоциклы (Для характеристик))""
| И ХарактеристикиНоменклатуры.Значение ПОДОБНО &Цвет_
|";

Запрос.УстановитьПараметр("Номенклатура_", Номенклатура);
Запрос.УстановитьПараметр("Цвет_", Цвет);
РезультатЗапроса = Запрос.Выполнить().Выбрать();

Если РезультатЗапроса.Количество()=0   Тогда
   
     GUID=Новый УникальныйИдентификатор();
СоздадимХарактеристикуСсылка=  Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(GUID);
СоздадимХарактеристику = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
СоздадимХарактеристику.УстановитьНовыйКод();
СоздадимХарактеристику.Владелец =Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);
   
НовоеСвойство3 =СоздадимХарактеристику.ДополнительныеРеквизиты.Добавить(); 
НовоеСвойство3.Свойство = "Цвет (Мотоциклы (Для характеристик))";
НовоеСвойство3.Значение = СокрЛП(Строка(Цвет));
     НовоеСвойство3.ТекстоваяСтрока = СокрЛП(Строка(Цвет));

СоздадимХарактеристику.НаименованиеПолное  =Строка(НовоеСвойство3.Значение);
СоздадимХарактеристику.Наименование =  Строка(НовоеСвойство3.Значение);
  СсылкаНового=Справочники[СоздадимХарактеристику.ЭтотОбъект.Метаданные().Имя].ПолучитьСсылку();
СоздадимХарактеристику.УстановитьСсылкуНового(СоздадимХарактеристикуСсылка);

Попытка
     СоздадимХарактеристику.Записать();
Исключение
     Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
    КонецПопытки; 

      Возврат СоздадимХарактеристику;
Иначе

    Пока РезультатЗапроса.Следующий() Цикл
      Характеристика = РезультатЗапроса.Характеристика;
КонецЦикла;
  Возврат  Характеристика;
КонецЕсли;

КонецФункции

но ссылка не заполняется


https://s8.hostingkartinok.com/uploads/images/2020/03/9b68e7b4f9bf18d8691767a7c560eb61.png
а нужно на выходе из функции передать именно ссылку.
Помогите, пожалуйста.

LexaK

э-э-э, что бы вернуть ссылку, вот это
Возврат СоздадимХарактеристику;
надо исправить так:
Возврат СоздадимХарактеристику.Ссылка;
если помогло нажмите: Спасибо!

Св Ч

я б не писала на форум, если бы всё так легко было Возврат СоздадимХарактеристику.Ссылка, я убрала СоздадимХарактеристику.Ссылка, поскольку объект создаётся а ссылка пустая

LexaK

Тогда попробуйте так

Попытка
     СоздадимХарактеристику.Записать();
      Возврат СоздадимХарактеристику.Ссылка;
Исключение
        //в том то и дело что объект не создался (не записался)
     Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
      Возврат Неопределено;
    КонецПопытки; 

      //////// Возврат СоздадимХарактеристику;

если помогло нажмите: Спасибо!

antoneus

А зачем все эти выкрутасы с СоздадимХарактеристикуСсылка и УстановитьСсылкуНового? Чем штатный механизм не устраивает?

Св Ч

да вылетает функция, наверное где-то неверно заполняю доп реквизиты, вот бы кто-нибудь хоть что-то существенное сказал...:^454^:
ошибка где-то тут
НовоеСвойство3 =СоздадимХарактеристику.ДополнительныеРеквизиты.Добавить(); 
      НовоеСвойство3.Свойство = "Цвет (Мотоциклы (Для характеристик))";
     НовоеСвойство3.Значение = СокрЛП(Строка(Цвет));
     НовоеСвойство3.ТекстоваяСтрока = СокрЛП(Строка(Цвет));

antoneus

Ладно, вот вам существенное. Зачем дергать в запросе все эти поля, если вам нужна только ссылка на характеристику? Почему просто не создать элемент и не довольствоваться той ссылкой, которую ему пожалует платформа?

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

Запрос.УстановитьПараметр("Номенклатура_",    Номенклатура);
Запрос.УстановитьПараметр("Цвет_",    Цвет);
РезультатЗапроса = Запрос.Выполнить().Выбрать();

Если РезультатЗапроса.Количество()=0   Тогда

СоздадимХарактеристику = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
СоздадимХарактеристику.УстановитьНовыйКод();
СоздадимХарактеристику.Владелец =Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);

НовоеСвойство3 =СоздадимХарактеристику.ДополнительныеРеквизиты.Добавить(); 
НовоеСвойство3.Свойство = "Цвет (Мотоциклы (Для характеристик))";
НовоеСвойство3.Значение = СокрЛП(Строка(Цвет));
НовоеСвойство3.ТекстоваяСтрока = СокрЛП(Строка(Цвет));

СоздадимХарактеристику.НаименованиеПолное  =Строка(НовоеСвойство3.Значение);
СоздадимХарактеристику.Наименование =  Строка(НовоеСвойство3.Значение);
Попытка
СоздадимХарактеристику.Записать();
Исключение
                    Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
                    Возврат Неопределено
КонецПопытки; 

Возврат СоздадимХарактеристику.Ссылка;

Иначе

РезультатЗапроса.Следующий();
Возврат РезультатЗапроса.Характеристика;

КонецЕсли;

КонецФункции


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

Св Ч

причем тут все поля в запросе, если ошибка при заполнении доп реквизитов...:dfbsdfbsdf:

antoneus

Текст у этой ошибки есть или вы предлагаете нам его угадывать? Мой код запускали? Насчет полей в запросе - мне правда интересно зачем они вам.

Св Ч

если бы текст  был бы, я бы уже решила, просто возврат
Возврат Неопределено
Добавлено: 11 мар 2020, 23:16


не создаёт не хрена... и не могу определить где вылетает
Добавлено: 11 мар 2020, 23:36


https://s8.hostingkartinok.com/uploads/images/2020/03/c0ac2ad3f2f679455b81853aed4faba3.png
Добавлено: 12 мар 2020, 00:18


https://s8.hostingkartinok.com/uploads/images/2020/03/fb17372df1b26de15322951eb6b2edc2.png
https://s8.hostingkartinok.com/uploads/images/2020/03/b3869837fb0487e86290d9635a1dd146.png
Добавлено: 12 мар 2020, 00:49


нет описания ошибки

Добавлено: 12 мар 2020, 01:53


Запрос.УстановитьПараметр("Номенклатура_", СокрЛП(Строка(Номенклатура)));
Запрос.УстановитьПараметр("Цвет_", СокрЛП(Строка(Цвет)));
РезультатЗапроса = Запрос.Выполнить().Выбрать();

Если РезультатЗапроса.Количество()=0   Тогда
     Цвет = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(Строка(Цвет)));
    СоздадимХарактеристику = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
СоздадимХарактеристику.УстановитьНовыйКод();
СоздадимХарактеристику.Владелец =Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Строка(Номенклатура))).Ссылка;

СоздадимХарактеристику.УстановитьСсылкуНового(Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор));
СоздадимХарактеристику.Наименование =  Цвет;

     НовоеСвойство3=СоздадимХарактеристику.ДополнительныеРеквизиты.Добавить();
НовоеСвойство3.Свойство=ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту(Строка("Цвет (Мотоциклы (Для характеристик))"));
НовоеСвойство3.Значение= СокрЛП(Строка(Цвет));


Попытка
      СоздадимХарактеристику.Записать();
  Возврат СоздадимХарактеристику.Ссылка;
Исключение
       Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
   Возврат неопределено;
    КонецПопытки; 

     
Иначе

    Пока РезультатЗапроса.Следующий() Цикл
      Характеристика = РезультатЗапроса.Характеристика;
КонецЦикла;
  Возврат  Характеристика;
КонецЕсли;

КонецФункции

Теги:

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

Рейтинг@Mail.ru

Поиск