Имя: Пароль:
1C
1С v8
Заполнение полей табличной части при выборе справочника
0 Dersus
 
13.04.20
11:21
Здравствуйте, прошу помочь с решение вопроса.
У меня есть табличная часть "ПереченоУслугИТоваров", в ней 3 строки
1. "УслугаИлиТовар", которая имеет тип ссылка и ссылается на справочник "Услуги" (в нем есть ещё 1 реквизит - стоимость)
2 и 3 - это стоимость и кол-во имеют тип число.

Так вот, как мне после выбора нужно мне услуги в 1 строке, сразу поставить и стоимость?

Я знаю, что это нужно делать при помощи события "ПриИзменении", но вот что писать хз, подскажите.
1 mikecool
 
13.04.20
11:53
табличная часть с 3 строками? что за изврат в решении?
2 Ёпрст
 
13.04.20
11:58
3 Dersus
 
13.04.20
12:12
(2) Мне бы на код глянуть)
4 Ёпрст
 
13.04.20
12:12
(3) открыть любую типовую и посмотреть
5 vi11ra
 
13.04.20
12:50
А стоимость услуги у тебя где записана, в справочнике номенклатуры?
6 Dersus
 
13.04.20
12:57
(5) Справочник "Услуги" реквизиты - "наименование", "стоимость".
7 GGDots
 
13.04.20
12:57
Ну совсем грубо и примерно - на первый раз сойдет:

(0) 3 колонки. Номенклатура, Стоимость, Количество

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
    
        Контейнер = Элементы.Номенклатура.ТекущиеДанные;

    Если Контейнер <> Неопределено Тогда
        Контейнер .Стоимость= ПолучитьСТоиомость(Контейнер .Номенклатура);
    КонецЕсли;
    
КонецПроцедуры

Функция ПолучитьСТоиомость(п_Номенклатура)

   //либо нормальный алгоритм из регистров
//либо
   Возврат п_Номенклатура.Стоимость;

КонецФункции
8 GGDots
 
13.04.20
12:58
(4) +++
9 GGDots
 
13.04.20
12:59
НЕ "Элементы.Номенклатура.ТекущиеДанные;", Элементы.ТабличнаяЧасть.ТекущиеДанные
10 vi11ra
 
13.04.20
13:46
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
    
        ТекДан = Элементы.Товары.ТекущиеДанные;
//".Товары." это название табличной части формы которую ты создал.
    ТекДан.Цена = ПолучитьЦенуНоменклатуры(ТекДан.Номенклатура);

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

&НаСервере
Функция ПолучитьЦенуНоменклатуры(Номенклатура);
    
    Возврат Номенклатура.Цена;
    
КонецФункции


Вот так должно хорошо работать :)
11 vi11ra
 
13.04.20
14:17
(0) ответ выше написал, попробуй так. Напиши если получится или не получится.
12 dezss
 
14.04.20
10:47
(10) 9 строк кода. И уже говнокод. Это просто дар)))
13 Dersus
 
14.04.20
16:39
(10) Не работает
14 Dersus
 
14.04.20
16:47
(7) Получилось, спасибо.
15 vi11ra
 
16.04.20
14:40
(12) Спасибо, 2 часа занятий на ютубе не прошли даром. Могу говнокодить. Буду рад эталонному примеру с пояснениями.
16 dezss
 
16.04.20
17:02
(15) Ну тут я вижу всего 2 ляпа
1. И самый критичный
&НаСервере
Функция ПолучитьЦенуНоменклатуры(Номенклатура);

Тебе не нужны никакие данные формы или объекта, а ты делаешь контекстный серверный. Это приводит к тому, что все данные формы пакуются и едут на сервер, а потом так же обратно.
Это лучше исправить на такой код:
&НаСервереБезКонтекста
Функция ПолучитьЦенуНоменклатуры(Номенклатура);

2. Не самое критичное, но тоже не лучший вариант. Такое обращение "Номенклатура.Цена" к полю "Цена" не самой лучший способ вытащить данные. В БСП есть ОбщегоНазначения.ЗначениеРеквизитаОбъекта. Если нет БСП, то просто вытащить запросом (собственно, в БСП запрос и формируется).
Не всегда такое решение подходит, но чаще всего оно эффективней.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс