Имя: Пароль:
1C
1С v8
Элемент в ТЧ управляемой формы
0 Gill
 
17.06.14
11:58
Всем привет! УПП 8.2. Есть док на управляемой форме.Необходимо при выборе реквизита (тип ссылка на документ) табличной части автоматически заполнять другие реквизиты этой же ТЧ. Пишу следующее,не заполняет:

&НаСервере
Функция  ПолучитьДанныеПоПутевомуЛисту(Ссылка)
    
    ТекНаряд = Элементы.Товары.ТекущиеДанные;

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

             
КонецФункции


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

    Если НЕ ПустаяСтрока(НарядПЛ) И ТипЗнч(НарядПЛ) = Тип("ДокументСсылка.ИнтекоПутевойЛистАвтотранспорта") Тогда
        СтруктураВозврата = ПолучитьДанныеПоПутевомуЛисту(НарядПЛ);
        ЗаполнитьЗначенияСвойств(Объект.ТМЦ, СтруктураВозврата);
    КонецЕсли;
    
КонецПроцедуры
1 Gill
 
17.06.14
12:27
up
2 Жан Пердежон
 
17.06.14
12:33
>> Ссылка.Ссылка = &Ссылка
а почему не Ссылка.Ссылка.Ссылка = &Ссылка ?)

>> ЗаполнитьЗначенияСвойств(Объект.ТМЦ, СтруктураВозврата);
вот тут ошибка
3 Gill
 
17.06.14
12:39
(2) ошибка в чем?
4 hhhh
 
17.06.14
12:43
(3) никогда не пиши Ссылка.Ссылка - это замедляет программу в десятки раз.
5 hhhh
 
17.06.14
12:47
(3) Объект.ТМЦ - это такое поле, ссылка на ТМЦ. Туда нельзя запихнуть целую структуру, она там не поместится.
6 Gill
 
17.06.14
12:50
(5) Объект.ТМЦ - это название ТЧ. А Элементы.Товары название "таблицы" на форме.
7 hhhh
 
17.06.14
12:53
(6) тогда вы должны в строки ТМЦ писать, а не в ТМЦ. Цикл для каждой строки ТЧ.
8 Timon1405
 
17.06.14
12:57
ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, СтруктураВозврата);
9 Gill
 
17.06.14
14:39
Что-то не догоняю я.(8) не работает, (7) как?!
10 Gill
 
17.06.14
15:13
up
11 hhhh
 
17.06.14
15:17
(10) что не работает в (8)? Если Водитель, то правильно не работает, в запросе нет этого поля
12 Gill
 
17.06.14
15:19
(11) ничего не заполняет
13 Timon1405
 
17.06.14
15:20
Имена колонок ТЧ в студию
14 Gill
 
17.06.14
15:53
Я видимо тупень,но не работает.Вот весь код

&НаСервере
Функция  ПолучитьДанныеПоПутевомуЛисту(Ссылка)
//    
    ТекНаряд = Элементы.Товары.ТекущиеДанные;

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

//        
//    
КонецФункции

&НаКлиенте
Процедура ТоварыНарядПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    НарядПЛ = Элемент;    
    Если НЕ ПустаяСтрока(НарядПЛ) И ТипЗнч(НарядПЛ) = Тип("ДокументСсылка.ИнтекоПутевойЛистАвтотранспорта") Тогда
    СтруктураВозврата = ПолучитьДанныеПоПутевомуЛисту(НарядПЛ);
        ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, СтруктураВозврата);
    КонецЕсли;    
    
КонецПроцедуры
15 singlych
 
17.06.14
16:02
(14)
ТипЗнч(НарядПЛ) = Тип("ДокументСсылка.ИнтекоПутевойЛистАвтотранспорта") всегда ложь.
Зачем в НарядПЛ пихать Элемент?
16 Gill
 
17.06.14
16:25
(13) имена колонок ТЧ вроде бы исправил
17 Gill
 
17.06.14
17:27
up
18 Gill
 
18.06.14
09:10
Вопрос остается актуальным.Что скажите?!
19 Timon1405
 
18.06.14
09:40
Скажем, что пора уже стряхнуть пыль с отладчика, и посмотреть 1) заходит ли вообще программа в ваше Если 2) типы присваиваемых объектов 3) выкинуть ЗаполнитьЗначенияСвойств и присвоить вручную
20 Рэйв
 
18.06.14
09:46
(14) Вообщето
ТипЗнч(НарядПЛ )=Тип("ПолеФормы")

так как у тебя
НарядПЛ = Элемент
21 Рэйв
 
18.06.14
09:47
так что условие у тебя супер конечно:-)
Неудивительно что в него не заходит
22 Gill
 
18.06.14
09:49
(19) выяснил,что в Если не заходит.А вместо ЗаполнитьЗначенияСвойств что нужно указать в качестве источника для заполнения?
23 Gill
 
18.06.14
09:50
(20) ну я пытаюсь указать в качестве условия из запроса текущий элемент для получения данных
24 Рэйв
 
18.06.14
09:50
(22) заполни вручную, чего паришься?
Дался тебе этот ЗаполнитьЗначенияСвойств
25 Рэйв
 
18.06.14
09:51
(23)
ТД=Элементы.ИмяТабЧасти.ТекущиеДанные.

Можешь попробовать передать его первым параметров как приемник
26 Рэйв
 
18.06.14
09:52
может заработает если правда поля структур имеют одинаковые имена:-)
27 Gill
 
18.06.14
10:06
(24) вручную, что писать в качестве источника(выборки) после Для каждого (?) Из (?) Цикл
28 Рэйв
 
18.06.14
10:10
(27) Сначала сам возвращаешь структуру с ответом, а потом не знаешь что с ней делать:-)

//--
ТД=Элементы.ИмяТабЧасти.ТекущиеДанные;

Для Каждого Эл Из СтруктураВозврата Цикл
     ТД[Эл.Ключ]=Эл.Значение;
КонецЦикла;
//------------
Но если действительно имена совпадают то можно ии так

ЗаполнитьЗначенияСвойств(ТД,СтруктураВозврата);
29 Рэйв
 
18.06.14
10:13
+ и кстати зачем тебе именно фиксирвоанная структура?
Обычная вполне нормально передается с сервера на клиент.
30 Gill
 
18.06.14
10:26
(28) &НаКлиенте
Процедура ТоварыНарядПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    НарядПЛ = Элементы.Товары.ТекущиеДанные;    
    //Если НЕ ПустаяСтрока(НарядПЛ) И ТипЗнч(НарядПЛ) = Тип("ДокументСсылка.ИнтекоПутевойЛистАвтотранспорта") Тогда
    СтруктураВозврата = ПолучитьДанныеПоПутевомуЛисту(НарядПЛ);
    ЗаполнитьЗначенияСвойств(НарядПЛ, СтруктураВозврата);
    //КонецЕсли
    
КонецПроцедуры

Ошибка Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'
31 hhhh
 
18.06.14
10:30
но действительно есть колонка "ТоварыВодитель"? в табличной части? Что-то гоните похоже. Колонка назывется "Водитель"?
32 Рэйв
 
18.06.14
10:31
(30)Ну да. Ты строку таб части хочешь на сервер отправить.Не ест он такое:-)

создай свою струтуру- ответ на клиенте, заполни данными строки  и отправляй ее . В нее же напишишь данные которые надо получить, вернешь на клиент и заполнишь строку.
33 singlych
 
18.06.14
10:57
ппц вы долгие.

ТС, ты передаешь на сервер какой-то хлам, и при этом никак его там не используешь.

Сделай уже на клиенте НарядПЛ = Элементы.Товары.ТекущиеДанные.ТоварыНаряд, а на сервере Запрос.УстановитьПараметр("Ссылка", Ссылка);

Ну и лишние строки убери.
34 Gill
 
18.06.14
11:15
Функция  ПолучитьДанныеПоПутевомуЛисту(Ссылка)
//    
ТекНаряд = Элементы.Товары.ТекущиеДанные;

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

КонецЕсли;
    
Возврат Новый ФиксированнаяСтруктура(СтруктураВозврата);    

//        
//    
КонецФункции


&НаКлиенте
Процедура ТоварыНарядПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    НарядПЛ = Элементы.Товары.ТекущиеДанные.ТоварыНаряд;    
    //Если НЕ ПустаяСтрока(НарядПЛ) И ТипЗнч(НарядПЛ) = Тип("ДокументСсылка.ИнтекоПутевойЛистАвтотранспорта") Тогда
    СтруктураВозврата = ПолучитьДанныеПоПутевомуЛисту(НарядПЛ);
    ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, СтруктураВозврата);
    //КонецЕсли
КонецПроцедуры

{Документ.ИнтекоПутевойЛистТракториста.Форма.ФормаДокументаУправляемая.Форма(3600)}: Поле объекта не обнаружено (ТоварыНаряд)
    НарядПЛ = Элементы.Товары.ТекущиеДанные.ТоварыНаряд;
35 Gill
 
18.06.14
11:16
(33) Поле объекта не обнаружено (ТоварыНаряд)
36 Gill
 
18.06.14
11:31
(33) что за лишние строки?
37 Gill
 
18.06.14
11:53
(32)не совсем понял про свою структуру,можно поконкретнее
38 Рэйв
 
18.06.14
11:55
(34) Делаешь структуру с полями одноименными колонкам строки.
Заполняешь данными строки, отправляешь на сервер, получаешь то что тебе нужно, вставляешь в структуру, отправляешь обратно на клиет. На клиенте на основании структуры заполняешь ТД.
39 Рэйв
 
18.06.14
11:55
(38) к (37)
40 Gill
 
18.06.14
12:04
(38) 1. "Делаешь структуру с полями одноименными колонкам строки"  СтруктураДанных = Новый Структура("ТоварыНаименованиеГруза,ТоварыЕдИзм,ТоварыСотрудник,ТоварыГрузоотправитель,ТоварыПриемщик,ТоварыПереданоГрузаПриемщику") ТАК?

2.отправляешь на сервер - не понимаю
3. получаешь то что тебе нужно - и это соответственно тоже
41 Рэйв
 
18.06.14
12:14
(40)Как тебя в адинесники угораздило то?:-) проще уж показать, чем объяснить.


//-
ТД=Элементы.Товары.ТекущиеДанные;
струкДанные=Новый Структура("<имена РЕКВИЗИТОВ таб части через ','>");
ЗаполнитьЗначениеСвойств(струкДанные,ТД);
СтруктураВозврата = ПолучитьДанныеПоПутевомуЛисту(струкДанные);

//.....В ПолучитьДанныеПоПутевомуЛисту() выполняешь запрос и заполняешь что надо в переданной струкДанные......

ЗаполнитьЗначениеСвойств(ТД,струкДанные);
//--------------
надеюсь с запросом и заполнением структуры сам разберешься
42 Рэйв
 
18.06.14
12:15
*последняя строка вместо
ЗаполнитьЗначениеСвойств(ТД,струкДанные);
пиши
ЗаполнитьЗначениеСвойств(ТД,СтруктураВозврата );


А то еще пару часов гадать будешь:-)
43 Gill
 
18.06.14
15:21
(41) а что же все-таки в качестве параметра запроса указывать?
44 Gill
 
18.06.14
15:28
как в условии запроса сослаться на конкретный(выбранный)элемент ТЧ Товары?
45 Gill
 
18.06.14
16:05
^
46 Gill
 
18.06.14
16:08
При выполнении запроса на сервере ТекущиеДанные - не доступно, при указании в качестве параметра "Ссылка" - Нельзя сравнивать поля неограниченной длины и поля несовместимых типов.Что в итоге указывать-то?
47 Gill
 
18.06.14
17:11
Всё-таки кто-нибудь может ответить:
"Как обратится к реквизиту табличной части управляемой формы и передать это значение в качестве значения в параметр запроса?"
48 Gill
 
19.06.14
09:09
^
49 Gill
 
19.06.14
09:19
Я всё еще верю, что вы мне сможете помочь...Меня интересует вопрос в (47)?
50 Fish
 
19.06.14
09:20
(47) У формы нет табличной части.
51 РенеДекарт
 
24.06.14
16:25
(47)>>Как обратится к реквизиту табличной части управляемой формы
ответ: никак. В УФ (да и, по большому счету, в ОФ 1С тоже) нельзя обратится к данным Формы, не находясь в данный момент в контексте это формы.
Чтобы получить данные - нужно обращаться к ТЧ объекта (или в регистр, если объект делает движения по какому-либо регистру).
И делается это НаСервере.
Получив данные - через Параметр запроса передают их в запрос (он тоже НаСервере).