Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Получение ссылки на справочник из элемента табличной части документа

Получение ссылки на справочник из элемента табличной части документа
Я
   ligatr
 
03.10.18 - 14:38
Добрый день!
Есть необходимость при изменении поля "Счетчик" (ссылка на справочник) ТЧ элемента изменять остальные колонки в данной строке. Если поле "Счетчик" пустой, то надо очистить все остальные поля, а если выбрано какое-либо значение справочника, то необходимо получить ссылку на элемент справочника.
Создал процедуру ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент).
Если делаю вот так - Сообщить(Элемент.Родитель.ТекущиеДанные.Счетчик);, то выводить реквизит "Наименование" нужного элемента справочника.
Если делаю вот так (чтобы получить ссылка на объект) - Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка;, то ничего не получается хотя тип полученного результата "СправочникСсылка.Счетчики"

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

                               Счетчикбъект = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка;
                КонецЕсли;
КонецПроцедуры

Подскажите как получить ссылку на объект который находится текущем элементе табличной части формы?
 
 
   Lexey_
 
1 - 03.10.18 - 15:11
(0) "то ничего не получается хотя тип полученного результата "СправочникСсылка.Счетчики""
так получается или не получается?
   ligatr
 
2 - 03.10.18 - 15:23
Не получается, иначе бы сюда не писал.
Непонятно в чем ошибка.
Возможно я вообще не так как нужно решаю эту задачу.
   Lexey_
 
3 - 03.10.18 - 15:37
(2) не понятно, что не получается
   ligatr
 
4 - 03.10.18 - 15:52
В результат выполнения вот это сроки Счетчикбъект = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка; переменная Счетчикбъект не является элементом справочника который на данный момент находится в таблично части документа. Т.е. я не могу сделать например так Счетчикбъект.Код или Счетчикбъект.ВидУслуги и обратиться к реквизитам справочника.
   unregistered
 
5 - 03.10.18 - 15:55
(4) > я не могу сделать например так Счетчикбъект.Код или Счетчикбъект.ВидУслуги и обратиться к реквизитам справочника

Всё верно. Там же русскими буквами написано - &НаКлиенте
А на клиенте таких возможностей нет.
   Lexey_
 
6 - 03.10.18 - 15:57
(4) "переменная Счетчикбъект не является элементом справочника который на данный момент находится в таблично части документа"
ты врешь
   ligatr
 
7 - 03.10.18 - 15:58
А как быть?
Мне нужно чтобы если пользователь изменил значение (ссылка на спровочнк) я смог изменить значения в других полях этой конкретной строки ТЧ формы.
Как это сделать?
   Lexey_
 
8 - 03.10.18 - 15:59
(7) ну если на клиенте нельзя, то какой вариант остается?
   unregistered
 
9 - 03.10.18 - 15:59
(4) > переменная Счетчикбъект не является элементом справочника

Ну тоже логично. Скорее всего ссылка на счетчик это Элемент.Родитель.ТекущиеДанные.Счетчик.
Чтобы получить на клиента реквизиты счетчика придётся сбегать за ними на сервер.
   ligatr
 
10 - 03.10.18 - 16:00
буду пробовать на сервере :-)
 
 Рекламное место пустует
   Kondarat
 
11 - 03.10.18 - 16:02
Если НЕ ЗначениеЗаполнено(Элементы.ТЧ.ТекущиеДанные.Счетчик) Тогда

//Всем почиститься!!!


КОнецЕсли;
   ligatr
 
12 - 03.10.18 - 16:14
Если делать так

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


                               Счетчикбъект = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка;
                КонецЕсли;
КонецПроцедуры

то вообще не отрабатывае (что как мне кажется логично).
Если делаю так

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


                               Счетчикбъект = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка;
                КонецЕсли;
КонецПроцедуры

то вываливается с такой ошибкой
{Документ.ВводПоказанийСчетчиков.Форма.ФормаДокумента.Форма(47)}: Ошибка при вызове метода контекста (ЗаполнениеТЧНаОсновеВведенныхДанных)
                ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
                форма: Элемент
                имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ПолеФормы'
   ligatr
 
13 - 03.10.18 - 16:15
Что не правильно делаю?
   Kondarat
 
14 - 03.10.18 - 16:16
(13) 11 читал?
   ligatr
 
15 - 03.10.18 - 16:26
Читал, но не понял как это может устранить эту проблему.

Я сделал так
&НаКлиенте
Процедура ТЧВводПоказанийСчетчиковСчетчикПриИзменении(Элемент)
                ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент);
КонецПроцедуры

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

Валится вот на этом шаге
ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент);

т.е. в процедуру ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент) даже не заходит
   Cool_Profi
 
16 - 03.10.18 - 16:27
Ну так привяжи её к реквизиту как обработчик события...
   ligatr
 
17 - 03.10.18 - 16:28
причем валится в любом случае заполнено или не заполнено поле Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик
   hhhh
 
18 - 03.10.18 - 16:29
(15) так пробуй
 ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент.Родитель.ТекущиеДанные);
   ligatr
 
19 - 03.10.18 - 16:30
(16) Она уже привязан ТЧВводПоказанийСчетчиковСчетчикПриИзменении
   Kondarat
 
20 - 03.10.18 - 16:30
&НаКлиенте

Процедура ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент)
                Если Не ЗначениеЗаполнено(Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик) Тогда
                               Сообщить("Всем почиститься");
                Иначе 
                               СчетчикСсылка = Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик
                КонецЕсли;
КонецПроцедуры
   ligatr
 
21 - 03.10.18 - 16:47
(20) Если делаю так
&НаКлиенте
Процедура ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент)
                Если Не ЗначениеЗаполнено(Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик) Тогда
                               Сообщить("Всем почиститься");
                Иначе 
//                           СчетчикСсылка = Элемент.Родитель.ТекущиеДанные.Счетчик.Ссылка;

                               СчетчикСсылка = Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик;
                               Сообщить(СчетчикСсылка.Коэффициент);
                КонецЕсли;
КонецПроцедуры

то происходит тоже самое что в исходном моем вопросе, т.е. не передается ссылка на справочник.
   ligatr
 
22 - 03.10.18 - 16:48
(18) Если делаю так 
 
&НаКлиенте
Процедура ТЧВводПоказанийСчетчиковСчетчикПриИзменении(Элемент)
//            ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент);

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

//                           Сообщить(СчетчикСсылка.Коэффициент);
                КонецЕсли;
КонецПроцедуры

то валится вот такая ошибка

{Документ.ВводПоказанийСчетчиков.Форма.ФормаДокумента.Форма(48)}: Ошибка при вызове метода контекста (ЗаполнениеТЧНаОсновеВведенныхДанных)
                ЗаполнениеТЧНаОсновеВведенныхДанных(Элемент.Родитель.ТекущиеДанные);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
                форма: Элемент
                имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'
   Lexey_
 
23 - 03.10.18 - 16:50
(22) передавай ссылку на сервер, а не вот эту вот дичь
   ligatr
 
24 - 03.10.18 - 16:51
(23) Подскажи как это сделать?
   Lexey_
 
25 - 03.10.18 - 16:56
(24) в параметре процедуры/функции же
   ligatr
 
26 - 03.10.18 - 16:58
(25) Я понимаю что в параметре процедуры/функции, но не могу понять что/как передавать.
   hhhh
 
27 - 03.10.18 - 16:59
(24) а так?

ЗаполнениеТЧНаОсновеВведенныхДанных(Элементы.ТЧВводПоказанийСчетчиков.ТекущиеДанные.Счетчик);
   ligatr
 
28 - 03.10.18 - 17:04
(27) Фух... Вот так заработало
   ligatr
 
29 - 03.10.18 - 17:05
Спасибо за помощь!!!


Список тем форума
Рекламное место пустует  Рекламное место пустует
Прочитай, хотя бы, Митичкина "Разработка в системе 1С:Предприятие 8". Волшебник
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует