|
Получение ссылки на справочник из элемента табличной части документа | ☑ | ||
---|---|---|---|---|
0
ligatr
03.10.18
✎
14:38
|
Добрый день!
Есть необходимость при изменении поля "Счетчик" (ссылка на справочник) ТЧ элемента изменять остальные колонки в данной строке. Если поле "Счетчик" пустой, то надо очистить все остальные поля, а если выбрано какое-либо значение справочника, то необходимо получить ссылку на элемент справочника. Создал процедуру ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент). Если делаю вот так - Сообщить(Элемент.Родитель.ТекущиеДанные.Счетчик);, то выводить реквизит "Наименование" нужного элемента справочника. Если делаю вот так (чтобы получить ссылка на объект) - Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка;, то ничего не получается хотя тип полученного результата "СправочникСсылка.Счетчики" &НаСервере Функция ВыборкаДанных() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ВладелецСчетчикаСрезПоследних.Счетчик КАК Счетчик, | ВладелецСчетчикаСрезПоследних.Абонент КАК Абонент, | ВладелецСчетчикаСрезПоследних.МестоУстановки КАК МестоУстановки, | ВладелецСчетчикаСрезПоследних.Счетчик.МестаПодключения КАК СчетчикМестаПодключения, | ВладелецСчетчикаСрезПоследних.Счетчик.Коэффициент КАК СчетчикКоэффициент, | ВладелецСчетчикаСрезПоследних.Счетчик.ЗаводскойНомер КАК СчетчикЗаводскойНомер |ИЗ | РегистрСведений.ВладелецСчетчика.СрезПоследних КАК ВладелецСчетчикаСрезПоследних |ГДЕ | ВладелецСчетчикаСрезПоследних.МестоУстановки.Ссылка ЕСТЬ НЕ NULL | И | ВладелецСчетчикаСрезПоследних.Счетчик.ВидУслуги = &ВидУслуги | |УПОРЯДОЧИТЬ ПО | Абонент"; Запрос.УстановитьПараметр("ВидУслуги",Объект.ВидУслуг); Результат = Запрос.Выполнить().Выбрать(); Объект.ТЧВводПоказанийСчетчиков.Очистить(); Пока Результат.Следующий() Цикл НоваяСтрока = Объект.ТЧВводПоказанийСчетчиков.Добавить(); НоваяСтрока.Контрагенты = Результат.Абонент.Ссылка; НоваяСтрока.МестоУстановки = Результат.МестоУстановки; НоваяСтрока.МестоПодключения = Результат.СчетчикМестаПодключения; НоваяСтрока.Счетчик = Результат.Счетчик.Ссылка; НоваяСтрока.КонецМесяца = ""; НоваяСтрока.НачалоМесяца = ""; НоваяСтрока.РазностьПоказаний = ""; НоваяСтрока.Коэффициент = Результат.СчетчикКоэффициент; НоваяСтрока.Потери = ""; НоваяСтрока.Расход = ""; КонецЦикла; Возврат 0; КонецФункции &НаКлиенте Процедура Заполнить(Команда) ВД = ВыборкаДанных(); КонецПроцедуры &НаКлиенте Процедура ТЧВводПоказанийСчетчиковСчетчикПриИзменении(Элемент) ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент); КонецПроцедуры &НаКлиенте Процедура ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент) Если Элемент.ТекстРедактирования = "" Тогда Сообщить("Удалить"); Иначе // Сообщить(Элемент.Родитель.ТекущиеДанные.Счетчик); Счетчикбъект = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка; КонецЕсли; КонецПроцедуры Подскажите как получить ссылку на объект который находится текущем элементе табличной части формы? |
|||
1
Lexey_
03.10.18
✎
15:11
|
(0) "то ничего не получается хотя тип полученного результата "СправочникСсылка.Счетчики""
так получается или не получается? |
|||
2
ligatr
03.10.18
✎
15:23
|
Не получается, иначе бы сюда не писал.
Непонятно в чем ошибка. Возможно я вообще не так как нужно решаю эту задачу. |
|||
3
Lexey_
03.10.18
✎
15:37
|
(2) не понятно, что не получается
|
|||
4
ligatr
03.10.18
✎
15:52
|
В результат выполнения вот это сроки Счетчикбъект = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка; переменная Счетчикбъект не является элементом справочника который на данный момент находится в таблично части документа. Т.е. я не могу сделать например так Счетчикбъект.Код или Счетчикбъект.ВидУслуги и обратиться к реквизитам справочника.
|
|||
5
unregistered
03.10.18
✎
15:55
|
(4) > я не могу сделать например так Счетчикбъект.Код или Счетчикбъект.ВидУслуги и обратиться к реквизитам справочника
Всё верно. Там же русскими буквами написано - &НаКлиенте А на клиенте таких возможностей нет. |
|||
6
Lexey_
03.10.18
✎
15:57
|
(4) "переменная Счетчикбъект не является элементом справочника который на данный момент находится в таблично части документа"
ты врешь |
|||
7
ligatr
03.10.18
✎
15:58
|
А как быть?
Мне нужно чтобы если пользователь изменил значение (ссылка на спровочнк) я смог изменить значения в других полях этой конкретной строки ТЧ формы. Как это сделать? |
|||
8
Lexey_
03.10.18
✎
15:59
|
(7) ну если на клиенте нельзя, то какой вариант остается?
|
|||
9
unregistered
03.10.18
✎
15:59
|
(4) > переменная Счетчикбъект не является элементом справочника
Ну тоже логично. Скорее всего ссылка на счетчик это Элемент.Родитель.ТекущиеДанные.Счетчик. Чтобы получить на клиента реквизиты счетчика придётся сбегать за ними на сервер. |
|||
10
ligatr
03.10.18
✎
16:00
|
буду пробовать на сервере :-)
|
|||
11
Kondarat
03.10.18
✎
16:02
|
Если НЕ ЗначениеЗаполнено(Элементы.ТЧ.ТекущиеДанные.Счетчик) Тогда
//Всем почиститься!!! КОнецЕсли; |
|||
12
ligatr
03.10.18
✎
16:14
|
Если делать так
&НаСервере Процедура ТЧВводПоказанийСчетчиковСчетчикПриИзменении(Элемент) ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент); КонецПроцедуры &НаСервере Процедура ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент) Если Элемент.ТекстРедактирования = "" Тогда Сообщить("Удалить"); Иначе // Сообщить(Элемент.Родитель.ТекущиеДанные.Счетчик); Счетчикбъект = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка; КонецЕсли; КонецПроцедуры то вообще не отрабатывае (что как мне кажется логично). Если делаю так &НаКлиенте Процедура ТЧВводПоказанийСчетчиковСчетчикПриИзменении(Элемент) ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент); КонецПроцедуры &НаСервере Процедура ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент) Если Элемент.ТекстРедактирования = "" Тогда Сообщить("Удалить"); Иначе // Сообщить(Элемент.Родитель.ТекущиеДанные.Счетчик); Счетчикбъект = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка; КонецЕсли; КонецПроцедуры то вываливается с такой ошибкой {Документ.ВводПоказанийСчетчиков.Форма.ФормаДокумента.Форма(47)}: Ошибка при вызове метода контекста (ЗаполнениеТЧНаОсновеВведенныхДанных) ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'ПолеФормы' |
|||
13
ligatr
03.10.18
✎
16:15
|
Что не правильно делаю?
|
|||
14
Kondarat
03.10.18
✎
16:16
|
(13) 11 читал?
|
|||
15
ligatr
03.10.18
✎
16:26
|
Читал, но не понял как это может устранить эту проблему.
Я сделал так &НаКлиенте Процедура ТЧВводПоказанийСчетчиковСчетчикПриИзменении(Элемент) ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент); КонецПроцедуры &НаСервере Процедура ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент) Если Не ЗначениеЗаполнено(Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик) Тогда Сообщить("Всем почиститься"); Иначе Счетчикбъект = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка; КонецЕсли; КонецПроцедуры Валится вот на этом шаге ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент); т.е. в процедуру ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент) даже не заходит |
|||
16
Cool_Profi
03.10.18
✎
16:27
|
Ну так привяжи её к реквизиту как обработчик события...
|
|||
17
ligatr
03.10.18
✎
16:28
|
причем валится в любом случае заполнено или не заполнено поле Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик
|
|||
18
hhhh
03.10.18
✎
16:29
|
(15) так пробуй
ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент.Родитель.ТекущиеДанные); |
|||
19
ligatr
03.10.18
✎
16:30
|
(16) Она уже привязан ТЧВводПоказанийСчетчиковСчетчикПриИзменении
|
|||
20
Kondarat
03.10.18
✎
16:30
|
&НаКлиенте
Процедура ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент) Если Не ЗначениеЗаполнено(Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик) Тогда Сообщить("Всем почиститься"); Иначе СчетчикСсылка = Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик КонецЕсли; КонецПроцедуры |
|||
21
ligatr
03.10.18
✎
16:47
|
(20) Если делаю так
&НаКлиенте Процедура ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент) Если Не ЗначениеЗаполнено(Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик) Тогда Сообщить("Всем почиститься"); Иначе // СчетчикСсылка = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка; СчетчикСсылка = Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик; Сообщить(СчетчикСсылка.Коэффициент); КонецЕсли; КонецПроцедуры то происходит тоже самое что в исходном моем вопросе, т.е. не передается ссылка на справочник. |
|||
22
ligatr
03.10.18
✎
16:48
|
(18) Если делаю так
&НаКлиенте Процедура ТЧВводПоказанийСчетчиковСчетчикПриИзменении(Элемент) // ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент); ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент.Родитель.ТекущиеДанные); КонецПроцедуры &НаСервере Процедура ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент) Если Не ЗначениеЗаполнено(Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик) Тогда Сообщить("Всем почиститься"); Иначе СчетчикСсылка = Элемент.Счетчик.Ссылка; // СчетчикСсылка = Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик; // Сообщить(СчетчикСсылка.Коэффициент); КонецЕсли; КонецПроцедуры то валится вот такая ошибка {Документ.ВводПоказанийСчетчиков.Форма.ФормаДокумента.Форма(48)}: Ошибка при вызове метода контекста (ЗаполнениеТЧНаОсновеВведенныхДанных) ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент.Родитель.ТекущиеДанные); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции' |
|||
23
Lexey_
03.10.18
✎
16:50
|
(22) передавай ссылку на сервер, а не вот эту вот дичь
|
|||
24
ligatr
03.10.18
✎
16:51
|
(23) Подскажи как это сделать?
|
|||
25
Lexey_
03.10.18
✎
16:56
|
(24) в параметре процедуры/функции же
|
|||
26
ligatr
03.10.18
✎
16:58
|
(25) Я понимаю что в параметре процедуры/функции, но не могу понять что/как передавать.
|
|||
27
hhhh
03.10.18
✎
16:59
|
(24) а так?
ЗаполнениеТЧНаОсновеВведенныхДанных(Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик); |
|||
28
ligatr
03.10.18
✎
17:04
|
(27) Фух... Вот так заработало
|
|||
29
ligatr
03.10.18
✎
17:05
|
Спасибо за помощь!!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |