Получение формы элемента справочника "Характеристики номенклатуры" с заполненными данными

1. Alexponenta 14.09.21 08:33 Сейчас в теме
Имеется обработка в которой формируются значения которые должны попасть в табличную часть справочника, после чего открывается форма с заполненными параметрами.
Есть две проблемы: пустая ссылка и табличная часть.

Получить форму - это понятно, но вот заполнить ее - уже проблема.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user5300 1010 14.09.21 08:57 Сейчас в теме
(1) В чем проблема ?


Форма = ПолучитьФорму("ХарактеристикиНоменклатуры");
Форма.Заполнить(Объект);  ///ЗаполнитьЗначенияСвойств(Форма.Объект, ЭтотОбъект);
Форма.Открыть();

3. Alexponenta 14.09.21 09:16 Сейчас в теме
(2)
У меня вот такая пачка кода:
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Номенклатура = //формируется название
	
	

	//Характеристика = ПолучитьФорму("Справочник.ХарактеристикиНоменклатуры.Форма.ФормаЭлемента");
	Характеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
        Характеристика.Владелец = КарточкаНоменклатуры;
        Характеристика.Наименование = Номенклатура;
	Характеристика.Активная = Истина;
	//Характеристика.Записать();     
	
	//ШиринаКровати
	Реквизит1 = Справочники.эл_СвойстваИзделия.НайтиПоНаименованию(ШиринаКровати,Истина,Справочники.эл_СвойстваИзделия.ШиринаКровати);
	ФормированиеЗначения(Реквизит1,"12357",Характеристика);
	
    Характеристика.ПолучитьФорму("ФормаЭлемента",Характеристика.Владелец);
	СвойстваХарактеристики = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    СвойстваХарактеристики.Отбор.Объект.Значение = Характеристика.Ссылка;
    СвойстваХарактеристики.Отбор.Объект.Использование = Истина;
    Характеристика.СформироватьНаименование(СвойстваХарактеристики.Выгрузить());
    КонецПроцедуры

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


Соль проблемы в процедуре формирование значения. Если характеристика.ссылка = ничего (лезем сюда без записи характеристики) получаем ошибку:
"запись не верна значение поля объект не может быть пустым"
4. user5300 1010 14.09.21 09:23 Сейчас в теме
(3)
Характеристика.Записать();


Так характеристика же записывается, почему ссылка должна быть пустой ?
5. Alexponenta 14.09.21 09:26 Сейчас в теме
(4)

Так не, мне то и нужно, чтобы это дело работало без Характеристика.Записать() (там закомментировано)
6. anykey_vrn 14.09.21 09:30 Сейчас в теме
(5) Если ты не записал объект - он не появится в базе, следовательно пустая ссылка. Я правильно понял, что после записи ты пытаешься получить форму и записать в нее какие то свойства?
8. Alexponenta 14.09.21 09:45 Сейчас в теме
(6)

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

Но как я понял - такое не провернуть.

Т.е. цель - программное создание характеристик. И как бы в целом оно работает - но вот проблему дублей не решает.
т.е. я могу создать пачку одинаковых характеристик, а по ТЗ такого быть не должно. вот и думаю над какими нибудь костылями
12. anykey_vrn 14.09.21 09:49 Сейчас в теме
(8) Что одинакового в дублях?
13. Alexponenta 14.09.21 09:55 Сейчас в теме
(12)

Просто все одинаковое, т.е. выбираю набор характеристик - а он уже есть, но поскольку создается не через стандартную обработку - проверки на дубли нет.
14. Alexponenta 14.09.21 09:56 Сейчас в теме
(12)
Прикрепленные файлы:
7. user5300 1010 14.09.21 09:41 Сейчас в теме
(5) может так ?
 &НаКлиенте
Процедура Команда4(Команда)
	Характеристика = ПолучитьФорму("Справочник.ХарактеристикиНоменклатуры.Форма.ФормаЭлемента"); 	
	
	Характеристика.Объект.Владелец = КарточкаНоменклатуры;
	Характеристика.Объект.Наименование = Номенклатура;
	
	ОБ = Характеристика.Объект.ДополнительныеРеквизиты.Добавить();
	ОБ.Свойство = ПланВиды(Код);
	ОБ.Значение = эл_СвойстваИзделия(ШиринаКровати);	
	
	Характеристика.Открыть();
	
КонецПроцедуры

&НаСервере
Функция ПланВиды(Код)
	Возврат ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду(Код)
КонецФункции

&НаСервере
Функция эл_СвойстваИзделия(ШиринаКровати)
	Возврат Справочники.эл_СвойстваИзделия.НайтиПоНаименованию(ШиринаКровати,Истина,Справочники.эл_СвойстваИзделия.ШиринаКровати);
КонецФункции

Показать
15. Alexponenta 14.09.21 10:02 Сейчас в теме
(7)
Характеристика = ПолучитьФорму("Справочник.ХарактеристикиНоменклатуры.Форма.ФормаЭлемента");

Характеристика.Объект.Владелец = КарточкаНоменклатуры;


Поле объекта не обнаружено
9. anykey_vrn 14.09.21 09:45 Сейчас в теме
Задача создать новый элемент справочника или изменить что то в существующем?
10. Alexponenta 14.09.21 09:46 Сейчас в теме
(9)

Программно создать новую характеристику не прибегая к стандартному созданию через (+). При этом учесть невозможность создания дублей.
11. anykey_vrn 14.09.21 09:48 Сейчас в теме
НоваяХарактеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
//Заполняем нужные реквизиты
НоваяХарактеристика.Записать();

Или после создания нужно открывать форму созданной характеристики?
16. anykey_vrn 14.09.21 10:04 Сейчас в теме
Если одинаковое наименование означает дубль, делай проверку
Если Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию("НазваниеСоздаваемойХарактеристики") = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка Тогда
//Создаем новую характеристику
КонецЕсли;

Если проверка идет по всем реквизитам характеристики можно создать функцию, в функции запрос по справочнику характеристики с условиямия на нужные реквизиты. Результат запроса обходить не нужно:
Если Выборка.Количество > 0 Тогда
//ТакаяХарактеристика уже существует
Возврат ОтказОтСоздания = Истина;
Иначе
Возврат ОтказОтСоздания = Ложь;
КонецЕсли;

Вызываем эту функцию перед созданием характеристики
ОтказОтСоздания = ПроверитьХарактеристику(необходимы условия для проверки);
Если Не ОтказОтСоздания Тогда
//Создаем характеристику
КонецЕсли;
17. Alexponenta 14.09.21 10:13 Сейчас в теме
(16) Ну по факту название формируется на основании шаблона. так что технически неплохой костыль.

Но по уму получается что просто нужно запрос лепить с проверками всех характеристик, т.к. в случае корректировки название сменится (ну или дописывать пару строк в формировании названия)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот