Как правильно прописать путь к справочнику номенклатура вес

1. VID1234 110 16.01.20 11:35 Сейчас в теме
Здравствуйте. У меня в коде есть такое выражение, СуммаОбъема = СуммаОбъема + Строка.Количество * Строка.Вес;, но в последнем Строка.Вес значение через отладчик, показывает 0, хотя в колонке вес указан как 1, я не знаю как подхватить именно нужное значение, поэтому подскажите пожалуйста, как напрямую из справочника подхватить данные, но только с идентификацией товара конечно, а то рандомно будет подтягивать без идентификации. Ссылка поля (колонки Вес) у меня такая, Объект.Товары.Номенклатура.ВесЧислитель


СуммаОбъема = СуммаОбъема + Строка.Количество * ЧТО НАПИСАТЬ ЗДЕСЬ ЧТОБЫ ДАННЫЕ ПОДТЯГИВАЛИСЬ НАПРЯМУЮ СО СПРАВОЧНИКА, ТОЛЬКО УКАЗАННОГО В СТРОКЕ ТОВАРА;
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. VID1234 110 16.01.20 12:40 Сейчас в теме
(1) Все разобрался, правда теперь при изменении количества, итоговая сумма значений не меняется, мне необходимо клацнуть по весу или объему в колонке тогда все меняется
6. alalsl 11 16.01.20 13:18 Сейчас в теме
(5) Так ты её сам пересчитывай
2. user623969_dusa 16.01.20 11:44 Сейчас в теме
разберитесь со структурой таблицы чтобы не было в колонке вес указан 1 а в строке 0

и тогда пишите вместо ЧТО НАПИСАТЬ ЗДЕСЬ ЧТОБЫ ДАННЫЕ ПОДТЯГИВАЛИСЬ НАПРЯМУЮ СО СПРАВОЧНИКА, ТОЛЬКО УКАЗАННОГО В СТРОКЕ ТОВАРА
просто Строка.Вес

вам же должно быть виднее что значит Количество умножить на Вес
в таблице строки должны быть Номенклатура - Колво Номенклатуры строки - Вес Номенклатуры строки
3. alalsl 11 16.01.20 11:46 Сейчас в теме
что такое строка?
можете скинуть целиком метод
4. VID1234 110 16.01.20 11:55 Сейчас в теме
(3)//VID(
Объем1 = 0;
Вес1 = 0;
Для Каждого Строка Из Объект.Товары Цикл
Объем1 = Объем1 + Строка.Количество * Объект.Товары.Номенклатура.ОбъемЧислитель;
Вес1 = Вес1 + Строка.Количество * Строка.Номентклатура.ВесЧислитель / Строка.Номентклатура.ВесЗнаменатель;
КонецЦикла;
ИтогоВес = Элементы.Товары.Итог("ИтогоВес");
ИтогоОбъемс = Элементы.Товары.Итог("ИтогоОбъем");
7. dakork 33 16.01.20 13:49 Сейчас в теме
(4)
Объект.Товары.Номенклатура.ОбъемЧислитель;
плохой код. Надо постараться минимизировать получение данных через точки
8. bad_wag 48 16.01.20 14:23 Сейчас в теме
(7) Что это вообще за код такой??
Объект.Товары.Номенклатура.ОбъемЧислитель

Обращение к коллекции без индекса, это должно ошибку выдавать

Наверное имелось ввиду
Объем1 = Объем1 + Строка.Количество * Строка.Номенклатура.ОбъемЧислитель;

и да, так лучше не делать, если есть необходимость получить реквизит через точку, то для этого в типовых конфигурациях есть функция
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ИмяРеквизита")
10. VID1234 110 16.01.20 14:41 Сейчас в теме
(8) я пока к такому не готов.
11. bad_wag 48 16.01.20 14:48 Сейчас в теме
(10) А что здесь непонятно? Этот метод подходит для однократной операции, в вашем же случае нужно сначала получить все необходимые данные для расчета запросом (можно и в самом запросе все расчитать) и потом уже обходить полученную коллекцию, чтобы полностью избежать операций через точку в цикле
12. VID1234 110 16.01.20 15:44 Сейчас в теме
(11) Подскажите еще, создаю условное оформление на эти созданные колонки, а именно меняю фон при отсутствии значения, но ничего не происходит, почему. Объясните.
Само оформление стоит галочка на Цвет Фона - выбран красный цвет, в условии левое значение - Объект-Товары-Вес, вид сравнения Не заполнено - правое значение не заполняется (пробовал меньше или равно 0), оформляемые поля ТоварОбъем (пробовал полностью таблицу товары), обновляю конфигурацию, но ничего не меняется
13. bad_wag 48 16.01.20 15:54 Сейчас в теме
(12) Покажите скрин настроек, а также скрин структуры табличной части на закладке реквизиты в конструкторе форм
14. VID1234 110 16.01.20 16:11 Сейчас в теме
(13)
Прикрепленные файлы:
15. bad_wag 48 16.01.20 16:24 Сейчас в теме
(14) Хм, можно попробовать поставить условие на равенство нулю, ну и отладчиком посмотреть, что на самом деле находится в этом реквизите, т.к. с виду условное оформление задано верно
16. bad_wag 48 16.01.20 16:26 Сейчас в теме
(15) Хотя есть идея, я так понимаю это какаято типовая конфигурация (на УТ похожа), там скорее всего при открытии формы очищается все условное оформление и программно задается свое, вот это надо проверить
17. VID1234 110 16.01.20 16:40 Сейчас в теме
В ПриОткрытии нет ничего подомного, нашел эту процедуру, но как добавить, в эту процедуру мое условие

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	// Условное оформление обеспечения.
	ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного(
		УсловноеОформление,"ДатаОтгрузки", "ДатаОтгрузки", "", "ДатаОтгрузкиОбязательна");
	
	ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного(
		УсловноеОформление, "ТоварыДатаОтгрузки", "ДатаОтгрузки", "Товары", "ДатаОтгрузкиОбязательна");

	ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного(
		УсловноеОформление, "ТоварыСклад", "Склад", "Товары", "СкладОбязателен");
	
	ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного(
		УсловноеОформление, "Склад", "Склад", "", "СкладОбязателен");
	
	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Состояние.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СостояниеПросрочено");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченныйДокумент);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Состояние.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Состояние");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Перечисления.СостоянияЗаказовКлиентов.Закрыт;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);
	
	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыПроцентАвтоматическойСкидки.Имя);

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСуммаАвтоматическойСкидки.Имя);

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыПроцентРучнойСкидки.Имя);

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСуммаРучнойСкидки.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Отменено");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;

	Элемент.Оформление.УстановитьЗначениеПараметра("ВыделятьОтрицательные", Истина);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЦена.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ВидЦены");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСумма.Имя);

	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

	ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

	ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ВидЦены");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;

	ГруппаОтбора3 = ГруппаОтбора2.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора3.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

	ОтборЭлемента = ГруппаОтбора3.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьРучныеСкидкиВПродажах");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

	//
	
	УчетНДСУП.УстановитьУсловноеОформлениеСуммНДСПоНалогообложениюПродажи(ЭтаФорма);

	//

	Ценообразование.УстановитьУсловноеОформлениеЦенаВключаетНДС(ЭтаФорма);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);

	//

	ОбщегоНазначенияУТ.УстановитьУсловноеОформлениеПриоритета(ЭтаФорма);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);

	//

	СкладыСервер.УстановитьУсловноеОформлениеСкладаВТЧ(ЭтаФорма);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СкладГруппа");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;

	Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);

	//

	Ценообразование.УстановитьУсловноеОформлениеВидовЦен(ЭтаФорма);

	//
	
	НоменклатураСервер.УстановитьУсловноеОформлениеСодержания(ЭтаФорма);

	//
	
	ПараметрыУстановки = МногооборотнаяТараСервер.ПараметрыУстановкиУсловногоОформленияДляСтрокСМногооборотной­Тарой();
	
	ПараметрыУстановки.Форма                 = ЭтаФорма;
	ПараметрыУстановки.ЭтоПоступление        = Истина;
	
	МногооборотнаяТараСервер.УстановитьУсловноеОформлениеДляСтрокСМногооборотнойТарой(ПараметрыУстановки);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСклад.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ТипНоменклатуры");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке;
	СписокЗначений = Новый СписокЗначений;
	СписокЗначений.Добавить(Перечисления.ТипыНоменклатуры.Товар);
	СписокЗначений.Добавить(Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
	ОтборЭлемента.ПравоеЗначение = СписокЗначений;

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Склад");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<для товаров>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, "СерииВсегдаВТЧТовары");

	//

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

			ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
			ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Приоритет.Имя);

			ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
			ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Приоритет");
			ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
			ОтборЭлемента.ПравоеЗначение = Выборка.Приоритет;

			Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Выборка.Цвет.Получить());
			
		КонецЦикла;
		
	КонецЕсли;

	//

	НаборыСервер.УстановитьУсловноеОформление(ЭтаФорма, "Товары");
	
	//
	ЗаказыСервер.УстановитьОформлениеОтмененнойСтроки(УсловноеОформление,
		Элементы.Товары,
		Элементы.ТоварыОтменено.Имя,
		Элементы.ТоварыПричинаОтмены.Имя,
		Элементы.ТоварыЦена.Имя,
		Элементы.ТоварыСумма.Имя);
		
	НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеНаправленияДеятельности(ЭтаФорма);
Показать
18. bad_wag 48 17.01.20 16:05 Сейчас в теме
(17) Добавьте эту процедуру в расширение с аннотацией "после" и заполните условное оформление подобно тому, как это делается в этой процедуре
9. VID1234 110 16.01.20 14:40 Сейчас в теме
Оставьте свое сообщение

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