Добрый день!
создаю новую характеристику номенклатуры ERP управляемые формы 8.3
&НаСервере
Функция СоздатьХарактеристику(Номенклатура,Цвет)
// ХарактеристикиНоменклатуры
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ХарактеристикиНоменклатуры.Ссылка КАК Характеристика,
| ХарактеристикиНоменклатуры.НомерСтроки,
| ХарактеристикиНоменклатуры.Свойство,
| ХарактеристикиНоменклатуры.Значение,
| ХарактеристикиНоменклатуры.ТекстоваяСтрока,
| ХарактеристикиНоменклатуры.Ссылка КАК Ссылка1,
| ХарактеристикиНоменклатуры.Ссылка.Владелец,
| ХарактеристикиНоменклатуры.Ссылка.Принципал,
| ХарактеристикиНоменклатуры.Ссылка.Контрагент,
| ХарактеристикиНоменклатуры.Ссылка.Предопределенный,
| ХарактеристикиНоменклатуры.Ссылка.ИмяПредопределенныхДанных,
| ХарактеристикиНоменклатуры.Ссылка.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных1,
| ХарактеристикиНоменклатуры.Свойство.ТипЗначения,
| Номенклатура.Ссылка КАК Ссылка2,
| Номенклатура.Наименование
| ИЗ
| Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиНоменклатуры
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
| ПО ХарактеристикиНоменклатуры.Ссылка.Владелец = Номенклатура.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
| ПО ХарактеристикиНоменклатуры.Свойство = ДополнительныеРеквизитыИСведения.Ссылка
|ГДЕ
| Номенклатура.Наименование = &Номенклатура_
| И ДополнительныеРеквизитыИСведения.Наименование = ""Цвет (Мотоциклы (Для характеристик))""
| И ХарактеристикиНоменклатуры.Значение ПОДОБНО &Цвет_
|";
Запрос.УстановитьПараметр("Номенклатура_", Номенклатура);
Запрос.УстановитьПараметр("Цвет_", Цвет);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Если РезультатЗапроса.Количество()=0 Тогда
GUID=Новый УникальныйИдентификатор();
СоздадимХарактеристикуСсылка= Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(GUID);
СоздадимХарактеристику = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
СоздадимХарактеристику.УстановитьНовыйКод();
СоздадимХарактеристику.Владелец =Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);
НовоеСвойство3 =СоздадимХарактеристику.ДополнительныеРеквизиты.Добавить();
НовоеСвойство3.Свойство = "Цвет (Мотоциклы (Для характеристик))";
НовоеСвойство3.Значение = СокрЛП(Строка(Цвет));
НовоеСвойство3.ТекстоваяСтрока = СокрЛП(Строка(Цвет));
СоздадимХарактеристику.НаименованиеПолное =Строка(НовоеСвойство3.Значение);
СоздадимХарактеристику.Наименование = Строка(НовоеСвойство3.Значение);
СсылкаНового=Справочники[СоздадимХарактеристику.ЭтотОбъект.Метаданные().Имя].ПолучитьСсылку();
СоздадимХарактеристику.УстановитьСсылкуНового(СоздадимХарактеристикуСсылка);
Попытка
СоздадимХарактеристику.Записать();
Исключение
Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
КонецПопытки;
Возврат СоздадимХарактеристику;
Иначе
Пока РезультатЗапроса.Следующий() Цикл
Характеристика = РезультатЗапроса.Характеристика;
КонецЦикла;
Возврат Характеристика;
КонецЕсли;
КонецФункции
svetas_l @ Сегодня, 12:46
,
зачем вам в запросе полное соединение? по контексту вашей задачи оно здесь вообще не нужно, сделали бы сразу выборку по номенклатуре, а потом отбор характеристик по ней
вот это зачем?
GUID=Новый УникальныйИдентификатор();
СоздадимХарактеристикуСсылка= Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(GUID);
СсылкаНового=Справочники[СоздадимХарактеристику.ЭтотОбъект.Метаданные().Имя].ПолучитьСсылку();
СоздадимХарактеристику.УстановитьСсылкуНового(СоздадимХарактеристикуСсылка);
Возврат СоздадимХарактеристику.Ссылка
Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()
СоздадимХарактеристику.Владелец =Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);
, вы точно уверены, что номенклатура будет найдена?
номенклатура или ищется или создаётся другой функцией, цель данной функции такая же либо найти либо создать новую характеристику, и передать ссылку на вновь созданную характеристику, непосредственно при заполнении в таблицу значений которая загружается в табличную часть документа "Поступление Товаров Услуг".
Вопрос был "как записать ссылку на вновь созданную характеристику". Пожалуйста, давайте, не отклоняться от темы вопроса.
Номенклатура создаётся, и заполняется в таблицу значений, и выгружается в документ,
так же создаются и выгружаются составные серийные номера (имеющие 5 дополнительных характеристик),
а характеристики не полностью выгружаются в документ, точнее после их создания функцией передаётся пустая ссылка на вновь созданную характеристику, в результате она не записывается в таблицу значений и не выгружается в табличную часть документа..
Нужно сделать так что бы ссылка заполнялась на вновь созданный документ.
Вам уже написали, правильный ответ. Вы возвращаете значение типа СправочникОбъект, а должны - СправочникСсылка.
Правильно писать -
СоздадимХарактеристику.Ссылка
Возврат СоздадимХарактеристику.Ссылка
Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()
nik389 @ Сегодня, 11:25
,
СоздадимХарактеристику.Ссылка = видно в отладчике ссылка=пустая, а объект создаётся, а нужно заполненную ссылку передать в любом случае
еще раз вопрос был по названию темы - как при создании объекта -передать заполненную ссылку, а не пустую. В отладчике видно - объект создаётся, но ссылка на него пустая, а не заполненная.....
ВОПРОС - передать не пустую ссылку, чтобы потом вставить напрямую в документ
Вопрос был "как записать ссылку на вновь созданную характеристику, но так чтобы она не была пустой!!!!".
pablo - вы правы, только теперь осталось ответить по теме вопроса "как записать ссылку на вновь созданную характеристику, но так чтобы она не была пустой!!!!""
nik389 - понимаете "как записать ссылку на вновь созданную характеристику, но так чтобы она не была пустой!!!!"" , а вы опять пишите - пустую ссылку (Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()), картинка из отладчика приложена была..
только теперь осталось ответить по теме вопроса "как записать ссылку на вновь созданную характеристику, но так чтобы она не была пустой!!!!""
svetas_l @ Сегодня, 12:21
,
ссылка появится после записи объекта. Судя по скрину отладки, у вас еще запись объекта не произошла
Vofka- вы такой круой всем всегда отвечаете, может быть мне ответите "как записать ссылку на вновь созданную характеристику, но так чтобы она не была пустой!!!!"" "
nik389 в исключение не вылетает , значит по идеи произошла....
Попытка
СоздадимХарактеристику.Записать();
Исключение
Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
КонецПопытки;
Попытка
СоздадимХарактеристику.Записать();
Исключение
Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
КонецПопытки;
Возврат СоздадимХарактеристику.Ссылка;
не получается объект создаётся, но с пустой ссылкой, и в документ не передаётся....по Олбъект.ссылка, поэтому и поставила Объект, чобы проверить есть ли что-то живое вообще, живое есть, но ссылка пустая
я б не писала на форму, если бы всё так легко было Возврат СоздадимХарактеристику.Ссылка, я убрала СоздадимХарактеристику.Ссылка, поскольку объект создаётся а ссылка пустая
svetas_l @ Сегодня, 15:39
,
да вылетает функция
наверное неправильно заполняю доп реквизиты
ошибка где-то тут
НовоеСвойство3 =СоздадимХарактеристику.ДополнительныеРеквизиты.Добавить();
НовоеСвойство3.Свойство = "Цвет (Мотоциклы (Для характеристик))";
НовоеСвойство3.Значение = СокрЛП(Строка(Цвет));
НовоеСвойство3.ТекстоваяСтрока = СокрЛП(Строка(Цвет));
Vofka помогите, пожалуйста
для начала сделаете все это вручную - определитесь что Вы делаете, а потом переходите на программирование.
sava1 @ Сегодня, 19:19
,
вообще не поняла, как вы себе это представляете - ошибку в создании доп реквизитов искать в ручную? затем переходя на программирование? вы кайф ловите?
svetas_l @ Сегодня, 19:54
,
я делаю функцию создания характеристик Функция СоздатьХарактеристику(Номенклатура,Цвет), она их как выяснилось не создаёт а вылетает
Что тут искать в ручную?
Господи 3 день торчу на этом форуме, а кроме бреда никто ничего не написал....
Вы связь обьектов себе представляете? Или опишите задачу и попросите код или задайте конкретный вопрос, а не огрызками.
svetas_l @ Сегодня, 20:09
,
svetas_l @ Сегодня, 22:38
,
Задача - чтобы функция по созданию характеристик - создавала или искала (искать ищет) характеристику и возвращала ссылку для прямой вставки в документ
svetas_l @ Сегодня, 22:41
,
изменила код
Функция СоздатьХарактеристику(Номенклатура,Цвет)
// ХарактеристикиНоменклатуры
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ХарактеристикиНоменклатуры.Ссылка КАК Характеристика,
| ХарактеристикиНоменклатуры.НомерСтроки,
| ХарактеристикиНоменклатуры.Свойство,
| ХарактеристикиНоменклатуры.Значение,
| ХарактеристикиНоменклатуры.ТекстоваяСтрока,
| ХарактеристикиНоменклатуры.Ссылка КАК Ссылка1,
| ХарактеристикиНоменклатуры.Ссылка.Владелец,
| ХарактеристикиНоменклатуры.Ссылка.Принципал,
| ХарактеристикиНоменклатуры.Ссылка.Контрагент,
| ХарактеристикиНоменклатуры.Ссылка.Предопределенный,
| ХарактеристикиНоменклатуры.Ссылка.ИмяПредопределенныхДанных,
| ХарактеристикиНоменклатуры.Ссылка.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных1,
| ХарактеристикиНоменклатуры.Свойство.ТипЗначения,
| Номенклатура.Ссылка КАК Ссылка2,
| Номенклатура.Наименование
| ИЗ
| Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиНоменклатуры
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
| ПО ХарактеристикиНоменклатуры.Ссылка.Владелец = Номенклатура.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
| ПО ХарактеристикиНоменклатуры.Свойство = ДополнительныеРеквизитыИСведения.Ссылка
|ГДЕ
| Номенклатура.Наименование = &Номенклатура_
| И ДополнительныеРеквизитыИСведения.Наименование = ""Цвет (Мотоциклы (Для характеристик))""
| И ХарактеристикиНоменклатуры.Значение ПОДОБНО &Цвет_
|";
Запрос.УстановитьПараметр("Номенклатура_", Номенклатура);
Запрос.УстановитьПараметр("Цвет_", СокрЛП(Строка(Цвет)));
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Если РезультатЗапроса.Количество()=0 Тогда
Цвет = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(Строка(Цвет)));
СоздадимХарактеристику = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
СоздадимХарактеристику.УстановитьНовыйКод();
СоздадимХарактеристику.Владелец =Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура).Ссылка;
СоздадимХарактеристику.УстановитьСсылкуНового(Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор));
СсылкаНаХарактеристику = СоздадимХарактеристику.ПолучитьСсылкуНового();
// СоздадимХарактеристику.НаименованиеПолное = Цвет;
СоздадимХарактеристику.Наименование = Цвет;
Попытка
СоздадимХарактеристику.Записать();
Возврат СоздадимХарактеристику.Ссылка;
Исключение
Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
Возврат неопределено;
КонецПопытки;
Иначе
Пока РезультатЗапроса.Следующий() Цикл
Характеристика = РезультатЗапроса.Характеристика;
КонецЦикла;
Возврат Характеристика;
КонецЕсли;
КонецФункции
svetas_l,
svetas_l @ Сегодня, 23:14
,
у меня наверное тип где-то не верно указан, осталось узнать где
Так проблема сейчас в чем? В том, что при записи вы в исключение попадаете или возвращается пустая ссылка? Это как бы не совсем одно и то же.
Это
СоздадимХарактеристику.УстановитьСсылкуНового(Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор));
СсылкаНаХарактеристику = СоздадимХарактеристику.ПолучитьСсылкуНового();
СсылкаНаХарактеристику = СоздадимХарактеристику.ПолучитьСсылкуНового();
svetas_l @ Сегодня, 23:29
,
проблема - должна передаваться ссылка на найденный или вновь созданный объект, а не пустая ссылка и не Неопределенно
svetas_l @ Сегодня, 23:30
,
убрала без изменений
Функция СоздатьХарактеристику(Номенклатура,Цвет)
// ХарактеристикиНоменклатуры
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ХарактеристикиНоменклатуры.Ссылка КАК Характеристика,
| ХарактеристикиНоменклатуры.НомерСтроки,
| ХарактеристикиНоменклатуры.Свойство,
| ХарактеристикиНоменклатуры.Значение,
| ХарактеристикиНоменклатуры.ТекстоваяСтрока,
| ХарактеристикиНоменклатуры.Ссылка КАК Ссылка1,
| ХарактеристикиНоменклатуры.Ссылка.Владелец,
| ХарактеристикиНоменклатуры.Ссылка.Принципал,
| ХарактеристикиНоменклатуры.Ссылка.Контрагент,
| ХарактеристикиНоменклатуры.Ссылка.Предопределенный,
| ХарактеристикиНоменклатуры.Ссылка.ИмяПредопределенныхДанных,
| ХарактеристикиНоменклатуры.Ссылка.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных1,
| ХарактеристикиНоменклатуры.Свойство.ТипЗначения,
| Номенклатура.Ссылка КАК Ссылка2,
| Номенклатура.Наименование
| ИЗ
| Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиНоменклатуры
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
| ПО ХарактеристикиНоменклатуры.Ссылка.Владелец = Номенклатура.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
| ПО ХарактеристикиНоменклатуры.Свойство = ДополнительныеРеквизитыИСведения.Ссылка
|ГДЕ
| Номенклатура.Наименование = &Номенклатура_
| И ДополнительныеРеквизитыИСведения.Наименование = ""Цвет (Мотоциклы (Для характеристик))""
| И ХарактеристикиНоменклатуры.Значение ПОДОБНО &Цвет_
|";
Запрос.УстановитьПараметр("Номенклатура_", Номенклатура);
Запрос.УстановитьПараметр("Цвет_", СокрЛП(Строка(Цвет)));
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Если РезультатЗапроса.Количество()=0 Тогда
Цвет = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(Строка(Цвет)));
СоздадимХарактеристику = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
СоздадимХарактеристику.УстановитьНовыйКод();
СоздадимХарактеристику.Владелец =Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура).Ссылка;
СоздадимХарактеристику.УстановитьСсылкуНового(Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор));
//СсылкаНаХарактеристику = СоздадимХарактеристику.ПолучитьСсылкуНового();
// СоздадимХарактеристику.НаименованиеПолное = Цвет;
СоздадимХарактеристику.Наименование = Цвет;
Попытка
СоздадимХарактеристику.Записать();
Возврат СоздадимХарактеристику.Ссылка;
Исключение
Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
Возврат неопределено;
КонецПопытки;
Иначе
Пока РезультатЗапроса.Следующий() Цикл
Характеристика = РезультатЗапроса.Характеристика;
КонецЦикла;
Возврат Характеристика;
КонецЕсли;
КонецФункции
Vofka @ Сегодня, 23:35
,
да при записи, как оказалось попадаю в исключение
svetas_l @ Сегодня, 23:35
,
наверное отсюда и пустая ссылка после записи
я думаю -где-то параметры не правильно заполнены...
Vofka @ Сегодня, 23:44
,
нет описания ошибки
svetas_l @ Сегодня, 23:46
,
Запрос.УстановитьПараметр("Номенклатура_", СокрЛП(Строка(Номенклатура)));
Запрос.УстановитьПараметр("Цвет_", СокрЛП(Строка(Цвет)));
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Если РезультатЗапроса.Количество()=0 Тогда
Цвет = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(Строка(Цвет)));
СоздадимХарактеристику = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
СоздадимХарактеристику.УстановитьНовыйКод();
СоздадимХарактеристику.Владелец =Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Строка(Номенклатура))).Ссылка;
СоздадимХарактеристику.УстановитьСсылкуНового(Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор));
СоздадимХарактеристику.Наименование = Цвет;
НовоеСвойство3=СоздадимХарактеристику.ДополнительныеРеквизиты.Добавить();
НовоеСвойство3.Свойство=ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту(Строка("Цвет (Мотоциклы (Для характеристик))"));
НовоеСвойство3.Значение= СокрЛП(Строка(Цвет));
Попытка
СоздадимХарактеристику.Записать();
Возврат СоздадимХарактеристику.Ссылка;
Исключение
Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
Возврат неопределено;
КонецПопытки;
Иначе
Пока РезультатЗапроса.Следующий() Цикл
Характеристика = РезультатЗапроса.Характеристика;
КонецЦикла;
Возврат Характеристика;
КонецЕсли;
КонецФункции
беглое гугление дает - https://pro1c.org.ua/redirect.php?https://forum.mista.ru/topic.php?id=280257
обратите на Запись Характеристики вначале и вКонце
sava1 @ Сегодня, 8:16
,
да только эти строки мы уже вставляли- в одном из вариантов кода
svetas_l @ Сегодня, 8:50
,
Цвет = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(Цвет);
Характеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
Характеристика.Владелец = СсылкаНаОбъект;
Характеристика.Наименование = Размер + ", " + Рост + ", " + Цвет;
Характеристика.Записать();
Вместо
Попытка
СоздадимХарактеристику.Записать();
Возврат СоздадимХарактеристику.Ссылка;
Исключение
Сообщить("Не удалось записать элемент справочника. " + ОписаниеОшибки());
Возврат неопределено;
КонецПопытки;
СоздадимХарактеристику.Записать();
Возврат СоздадимХарактеристику.Ссылка;
svetas_l, окно с ошибкой не ждать?
Vofka @ Сегодня, 17:16
,
нашла запись ошибки уже.. просто в стандартных настройках блокируется добавление характеристик с одинаковыми названиями даже подчинённый разным единицам номенклатуры. вот и тихо съезжало с создания элемента, блин без вашего совета снять обработку исключения, я ковырялась уже неделю....спасибо.....сейчас еще отлаживаю...может ещё что-то цепляет....Спасибо....
svetas_l @ Сегодня, 20:24
,
картинка человека с бокалом очень красивая - её прям поцеловать хочется.....
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua