Не заполняется характеристика в строке документа

1. user1671936 1 23.04.22 15:05 Сейчас в теме
Здравствуйте. Столкнулся с проблемой : не заполняется строка характеристика при добавлении новой строки в тч документа. При изменении этой строки характеристика обновляется и добавляется, не работает именно с новой строкой. Хотя в отладчике показывает, что значение присвоено. Пробовал и Расш1_ТоварыНоменклатураПриИзмененииВместо, и Расш1_ТоварыНоменклатураПриИзмененииПосле, результат идентичный. Подскажите, пожалуйста, что не так делаю?
&НаКлиенте
Процедура Расш1_ТоварыНоменклатураПриИзмененииПеред(Элемент)
	
	
	СтрокаТабличнойЧасти = Элементы.Запасы.ТекущиеДанные;
        СтрокаТабличнойЧасти.Характеристика = ПолучитьХарактеристику(СтрокаТабличнойЧасти .Номенклатура);

КонецПроцедуры;

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

Показать
По теме из базы знаний
Найденные решения
13. user1671936 1 24.04.22 13:08 Сейчас в теме
Всем спасибо! Решил задачу :
ХарактеристикаНоменклатуры = ПолучитьХарактеристику(СтрокаТабличнойЧасти.Номенклатура);
СтруктураДанные.Вставить("Характеристика", ХарактеристикаНоменклатуры);
Если СтруктураДанные.ИспользоватьХарактеристики Тогда
			Если ПодборНоменклатурыИзСписка И ТипЗнч(СтруктураВыбораНоменклатуры) = Тип("Структура") Тогда
					СтрокаТабличнойЧасти.Характеристика = СтруктураВыбораНоменклатуры.Характеристика;				
			Иначе  				
			СтрокаТабличнойЧасти.Характеристика = СтруктураДанные.Характеристика;				
			КонецЕсли;
		КонецЕсли;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Ivanov_OM 38 23.04.22 17:42 Сейчас в теме
(1) Ошибка в передаче параметра.
Вы делаете так:
Запрос.УстановитьПараметр("Владелец", СокрЛП(Номенклатура));

И в качестве владельца передается СТРОКА наименование номенклатуры.
А нужно передать ссылку:
Запрос.УстановитьПараметр("Владелец", Номенклатура);
3. user1671936 1 23.04.22 19:49 Сейчас в теме
(2) там справочник интересный, владелец - реквизит с типом строка, результат не пустой запросом возвращается в запросе
4. Ivanov_OM 38 23.04.22 19:55 Сейчас в теме
(1) Владельцем может быть только объект ссылочного типа, значит в конфигурации что-то не так.
(3)
6. user1671936 1 23.04.22 20:11 Сейчас в теме
(4) вот значение, которое возвращает выборка.
Прикрепленные файлы:
5. user1671936 1 23.04.22 19:56 Сейчас в теме
(2) при заполнении документа она не отображается, но когда нажимаю записать то сразу отображается. А почему при заполнении не отображается понять не могу.
7. Chinga050 19 23.04.22 21:41 Сейчас в теме
Доброго дня. Была подобная проблема. Но на сто процентов не вспомню как решил. Но по-моему что то из этого

Обновить данные формы:

ЭтаФорма.Прочитать();
Обновить данные списка (динамического списка) на форме:

Элементы.Список.Обновить();
Обновить содержание элементов управления:

ЭтаФорма.ОбновитьОтображениеДанных();
10. user1671936 1 24.04.22 10:55 Сейчас в теме
(7) добрый день. Попробовал ваши рекомендации, но увы, не помогло.
(7)
ЭтаФорма.Прочитать();
этот метод удаляет добавленную новую строку.
8. polax 23.04.22 22:44 Сейчас в теме
1. Однозначно делать После, даже если это не влияет на результат. Перед - правильно использовать, если надо подкорректировать какие-то данные используемые в основной конфигурации, для достижения 100% гарантии добавления - лучше и правильней После
2. Сам подход, заполнять характеристику при изменении номенклатуры, порочен. Характеристики на то и включают, чтобы передать какие-то различные свойства одного товара. Т.е. у номенклатуры практически всегда несколько характеристик, иначе в них нет смысла. Запрос вернет (и, скорей всего, возвращает) НЕСКОЛЬКО значений. Поэтому и не может отобразить.
Так что характеристики однозначно устанавливать руками. Ну или программно, но тогда нужен какой-то третий признак для правильной выборки только одного значения характеристики
Кстати, Попробуй вставить цикл Пока Выборка.Следующий(), почти уверен, все заполнится последним значением характеристики
Chinga050; +1 Ответить
9. user1671936 1 24.04.22 10:53 Сейчас в теме
(8)
Попробуй вставить цикл Пока Выборка.Следующий()
попробовал, у некоторой номенклатуры только одна характеристика, возвращается оно, но в строку не добавляется, пока не запишу документ в колонке характеристика пустое значение. А у номенклатуры с несколькими х-ками возвращает последнее значение, но оно все равно не проставляется до записи.
11. polax 24.04.22 11:17 Сейчас в теме
(9) Я бы рекомендовал не заполнять поле характеристика, а формировать список выбора доступных характеристик для этой конкретной номенклатуры. А уже из списка выбирать вручную. Так сделано в типовых
12. user1671936 1 24.04.22 12:42 Сейчас в теме
(11) Я объяснял, что должно быть как говорите вы, Но задачу поставили такую, что должно все автоматически заполняться, и характеристика браться первая из имеющихся. И при вводе только номенклатуры, чтоб больше ничего вручную не вводить.
13. user1671936 1 24.04.22 13:08 Сейчас в теме
Всем спасибо! Решил задачу :
ХарактеристикаНоменклатуры = ПолучитьХарактеристику(СтрокаТабличнойЧасти.Номенклатура);
СтруктураДанные.Вставить("Характеристика", ХарактеристикаНоменклатуры);
Если СтруктураДанные.ИспользоватьХарактеристики Тогда
			Если ПодборНоменклатурыИзСписка И ТипЗнч(СтруктураВыбораНоменклатуры) = Тип("Структура") Тогда
					СтрокаТабличнойЧасти.Характеристика = СтруктураВыбораНоменклатуры.Характеристика;				
			Иначе  				
			СтрокаТабличнойЧасти.Характеристика = СтруктураДанные.Характеристика;				
			КонецЕсли;
		КонецЕсли;
Показать
Оставьте свое сообщение

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