Имя: Пароль:
1C
1С v8
1C 82 Управляемая форма с двумя связанными табличными частями
, ,
0 dmabramov
 
28.03.14
14:32
Приветствую форумчане!
Недавно столкнулся с управляемыми формами и не могу понять реализовать следующее:
Есть справочник "пакет услуг" с табличной частью "Состав" которая хранит список номенклатуры.

Есть документ с двумя табличными частями:
1 ТЧ - "Товары" хранит список пакетов услуг

2 ТЧ - "Расшифровка" хранит список номенклатуры

Нужно сделать так, чтобы при выборе пакета услуг в  ТЧ "Товары" автоматически заполнялись строки в ТЧ "Расшифровка" (данными из справочника)

В модуле формы для колонки "Пакет услуг" создал процедуру:
&НаКлиенте
Процедура ПакетУслугОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    ЗаполнитьРасшифровку(ВыбранноеЗначение);
КонецПроцедуры

Потом понял, что через "ВыбранноеЗначение" не получиться получить табличную часть справочника.
Как поступить?
1 butterbean
 
28.03.14
14:33
ПриИзменении как-то правильнее
2 dmabramov
 
28.03.14
14:42
Я сначала так и поступил но:

&НаКлиенте
Процедура ПакетУслугПриИзменении(Элемент)
    // Вставить содержимое обработчика.
КонецПроцедуры

В "Элемент" вообще нет ссылки на выбранное значение!

Мне необходимо как то получить данные из табличной части справочника. Я не могу понять как это реализуется в управляемой форме.
3 butterbean
 
28.03.14
14:43
(2)
как-то так:
ТекДанные = Элемент.ТекущиеДанные;
ЗаполнитьРасшифровку(ТекДанные.ПакетУслуг);
4 butterbean
 
28.03.14
14:44
(3)+
т.е. так:
ЗаполнитьРасшифровку(Элементы.ТвояТабЧасть.ТекущиеДанные.ПакетУслуг);
5 dmabramov
 
28.03.14
14:48
Не прокатывает:

{Документ.Заправка.Форма.ФормаДокумента.Форма(22)}: Поле объекта не обнаружено (ТекущиеДанные)
    ТекДанные = Элемент.ТекущиеДанные;
6 toypaul
 
гуру
28.03.14
14:51
Элемент это колонка
надо через Элементы.ИмяТвоейТЧ

вообще хоть бы чуть материал по УФ для начало подучить.
7 dmabramov
 
28.03.14
14:59
Да я согласен что надо подучить! Просто как всегда срочно нужно сделать, а я в УФ профан)

butterbean Спасибо! Получилось, я очень благодарен.
8 dmabramov
 
28.03.14
15:11
Блин! Прошу не ругайте меня сильно. Теперь такая проблема:

Создал такие процедуры:


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

&НаКлиенте
Процедура ПакетУслугПриИзменении(Элемент)
    Состав = ПолучитьСостав(Элементы.Товары.ТекущиеДанные.ПакетУслуг);
    Для Каждого ТекСтрока Из Состав Цикл
        Элементы.Расшифровка.ДобавитьСтроку();
        НоваяСтрока = Элементы.Товары.ТекущиеДанные;
        НоваяСтрока.Номенклатура   =ТекСтрока.Номенклатура;
        НоваяСтрока.Количество     =ТекСтрока.Количество;
    КонецЦикла;
КонецПроцедуры

Ругается:

Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'

Как я понял, нельзя передать таблицу значений на форму.

А как тогда поступить?
9 butterbean
 
28.03.14
15:12
(8) ты поднапрягись и прочитай СП, про таблицу значений, например
10 dmabramov
 
28.03.14
15:29
Читал. В обычно приложении это работало...
11 dmabramov
 
28.03.14
15:30
Попробую через массив передать.
12 antoneus
 
28.03.14
15:41
&НаСервере
Функция ПолучитьСостав(ПакетУслуг)    
    Состав = ПакетУслуг.Состав.Выгрузить();
    ЗначениеВРеквизитФормы(Состав.Скопировать("Номенклатура, Количество"), "Расшифровка")
КонецФункции
13 antoneus
 
28.03.14
15:41
+(12) И процедура будет, а не функция, то есть.
14 antoneus
 
28.03.14
15:42
фак.

ЗначениеВРеквизитФормы(Состав.Скопировать(, "Номенклатура, Количество"), "Расшифровка")
15 dmabramov
 
28.03.14
15:55
Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
    ЗначениеВРеквизитФормы(Состав.Скопировать(,"Номенклатура, Количество"), "Расшифровка");    
по причине:
Недопустимое значение параметра (параметр номер '2')


Такое выдал.
16 dmabramov
 
28.03.14
15:56
Этот метод для табличной части разве работает?
17 antoneus
 
28.03.14
16:04
Ну на сервере и заполняй её.

Для каждого ТекСтрока из ПакетУслуг.Состав Цикл
    НовСтрока = Объект.Расшифровка.Добавить();
    ЗаполнитьЗначенияСвойств(НовСтрока, ТекСтрока);
КонецЦикла
18 DexterMorgan
 
28.03.14
16:18
При решении этой задачи ты все равно придешь к тому, что необходимо связь реализовывать не по номенклатуре, а по ключу связи строк. Что будет если в тч есть дубли пакетов услуг?

Для заполнения тч "Расшифровка":

&НаСервере
Процедура ЗаполнитьРасшифровка(ПакетУслуг)    
Запрос = Новый Запрос;
...  
Объект.Расшифровка.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедуры
19 dmabramov
 
28.03.14
17:48
antoneus   Спасибо, получилось!А то я уже отчаялся))

DexterMorgan Да! Я именно так и планирую - Таблицы связать реквизитами "КлючСвязи". Набор нужен чтобы расшифровки удобнее заполнять было.

Я это много раз делал в обычном приложении. Но в управляемом я чувствую еще поломаю голову))