Очень нужна помощь с решением задачи

1. Rikyavik 17.04.18 09:04 Сейчас в теме
У меня есть документ ПеремещениеТСИОборудования и переодический регистр сведений МестонахождениеТС. Надо чтоб при выборе Транспортного средства и оборудования в документе ПеремещениеТСИОборудования автоматически подтягивалась информация о водителе(СправочникСсылка.Сотрудники) и бортовом номере (Строка).
Я решил сделать так :
1)На ФормеДокумента Перемещение вынес табличную часть с нужными реквизитами.
2)Проведение по регистрам сведений водителя и бортовой .
3) И в реквизите на форме ТС и Оборудование пишу событие при изменении . Хочу вытащить данные через срез последних.
ТСНомерТС - ТС и Оборудование.

Код:

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


Но не получаеться. Сам пока новичок и трудно пока писать код.
По теме из базы знаний
Найденные решения
30. RustamZz 18.04.18 16:08 Сейчас в теме
(28)
ТСТСПриИзмененииНаСервере(Элементы.ТС.ТекущиеДанные.ТС)
Rikyavik; +1 Ответить
35. user705522_constantin_h 35 19.04.18 15:01 Сейчас в теме
(34)Как я понимаю должно быть:
&НаКлиенте 
Процедура ТСТСПриИзменении(Элемент)
     ПриИзмененииТСТСнаСервере(Элемент); 
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииТСТСнаСервере(Элемент); 
     //Выполняешь требуемые действия
   Сведения = РегистрыСведений.уатМестонахождениеТС.СрезПоследних((ТекущаяДата()), Новый 
   Структура("Организация,ТС",Объект.Организация,Элемент.ТекущиеДанные.ТС));
   Элемент.ТекущиеДанные.Водитель = Сведения[0].Водитель;
   Элемент.ТекущиеДанные.БортНомер = Сведения[0].БортНомер;
КонецПроцедуры

Показать

Остановку в отладчике поставьте на этой строке и посмотрите:Элемент.ТекущиеДанные.ТС. Есть ли он и чему равен.
Rikyavik; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Fe9_min 50 17.04.18 09:39 Сейчас в теме
УАТ)
Вы, наверное, не правильно обращаетесь к регистру сведений, в "Элемент" регистр вряд ли будет. А там бог его знает.
Я всегда через запрос обращаюсь, примерно так:
Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	уатМестонахождениеТССрезПоследних.ТС,
	|	уатМестонахождениеТССрезПоследних.Колонна
	|ИЗ
	|	РегистрСведений.уатМестонахождениеТС.СрезПоследних(&Дата, ТС.Водитель = &Водитель) КАК уатМестонахождениеТССрезПоследних";
	
	Запрос.УстановитьПараметр("Водитель", Объект.ТС.Водитель);
	Запрос.УстановитьПараметр("Дата", ТекущаяДата());
	
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		// Ваш код для обхода
	КонецЦикла;
Показать
Vitaly1C8; Rikyavik; +2 Ответить
3. Rikyavik 17.04.18 09:46 Сейчас в теме
А через срез последних можно ли ? Сам понимаю что не через элемент
Сведения = РегистрыСведений.уатМестонахождениеТС.СрезПоследних((ТекущаяДата()), Новый Структура("Водій",Объект.ТС.Водій));
Но так ругаеться компилятор :

Документ.уатПеремещениеТСиОборудования.Форма.ФормаДокумента.Форма(176,13)}:Переменная не определена (РегистрыСведений)
Сведения = <<?>>РегистрыСведений.уатМестонахождениеТС.СрезПоследних((ТекущаяДата()), Новый Структура("Водитель",Объект.ТС.Водитель));
6. RustamZz 17.04.18 10:52 Сейчас в теме
(3) Форма управляемая? Код на &Клиент?
4. Rikyavik 17.04.18 09:46 Сейчас в теме
5. vnagapov 17.04.18 10:48 Сейчас в теме
Вероятно вы обращаетесь к выборке по регистру на Клиенте. Надо на Сервере.
Rikyavik; +1 Ответить
7. Rikyavik 17.04.18 11:09 Сейчас в теме
Форма Управляемая и Код на &Клиент в событии при Изменении.
Тоесть надо прописать ПриСоздании на Сервере и вызвать ПриИзменении на клиенте? Я так понимаю?
9. YuriIn 17.04.18 11:19 Сейчас в теме
(7)
&НаКлиенте 
Процедура ПриИзмененииРеквизита()
	  ПриИзмененииРеквизитаНаСервере();
КонецПроцедуры;

&НаСервере
Процедура ПриИзмененииРеквизитаНаСервере()
	//Тут делаете обращение к базе данных и заполняете
КонецПроцедуры;
Показать
Rikyavik; +1 Ответить
8. Rikyavik 17.04.18 11:13 Сейчас в теме
ну или как то по другому?
10. kudlach 13 17.04.18 12:16 Сейчас в теме
БортовойНомер прибить к справочнику ТранспортногоСредства. Однозначно.
Текущий водитель из Регистра сведений по любому брать через
&НаСервере
Хоть через запрос, хоть через РегистрыСведений.уатМестонахождениеТС.СрезПоследних(КонечнаяДата,ОтборСтруктура)
Возвращает ТаблицуЗначений, если есть записи.

&НаКлиенте
Процедура ТСНомерТСПриИзменении(Элемент)
     Водитель=ПолучитьВодителя(ТранспортноеСредство);
КонецПроцедуры

&НаСервере
Функция ПолучитьВодителя(ТранспортноеСредство)
        Сведения = Элемент.РегистрыСведений.уатМестонахождениеТС.СрезПоследних(ТекущаяДата()), Новый Структура("ТранспортноеСредство",ТранспортноеСредство);
        Если Сведения.КУоличество()>0 Тогда
                Водитель=Сведения.Водитель;
        Иначе 
                Водитель=Неопределено;
         КонецЕсли;
         Возврат Водитель;
КонецФункции
Показать
Rikyavik; +1 Ответить
12. Rikyavik 17.04.18 14:15 Сейчас в теме
(10)
Не видел.Сейчас попробую
11. Rikyavik 17.04.18 14:13 Сейчас в теме
Прописал код + в СрезПоследних в Новый Структура прописал "Организация" так как это измерение а Водитель - ресурс :

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

&НаКлиенте
Процедура ТСНомерТСПриИзменении(Элемент)
	ПриИзмененииТСНомерТСнаСервере(Элемент);
КонецПроцедуры
Показать


Но все равно не подтягивает данные. Кто знает почему так?
13. user705522_constantin_h 35 17.04.18 17:38 Сейчас в теме
(11)

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

&НаКлиенте
Процедура ТСНомерТСПриИзменении(Элемент)
КонецПроцедуры

&НаСервере
ПриИзмененииТСНомерТСнаСервере(Элемент);
КонецПроцедуры
Показать

Какая-то у вас каша.

&НаСервере	
Процедура ПриИзмененииТСНомерТСнаСервере(Элемент) 
    Сведения = Элемент.РегистрыСведений.уатМестонахождениеТС.СрезПоследних((ТекущаяДата()), Новый     
    Структура("Организация, Водитель", Объект.Организация, Объект.ТС.Водитель)); 
    БортовойНомер = Сведения[0].БортовойНомер;
КонецПроцедуры 

&НаКлиенте 
Процедура ТСНомерТСПриИзменении(Элемент) 
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииТСНомерТСнаСервере(Элемент); 
КонецПроцедуры
Показать
Rikyavik; +1 Ответить
14. Rikyavik 17.04.18 18:56 Сейчас в теме
А зачем 2 раза процедуру на сервере?
15. user705522_constantin_h 35 17.04.18 18:58 Сейчас в теме
(14)Это у вас так было написано, я просто ошибки исправил.
16. Rikyavik 17.04.18 19:17 Сейчас в теме
17. Rikyavik 17.04.18 19:21 Сейчас в теме
(15)А еще вопрос.У меня водитель это ресурс а не измерение.Получаеться я не могу его передать в Структура("Водитель")?
18. user705522_constantin_h 35 17.04.18 20:10 Сейчас в теме
19. Rikyavik 17.04.18 20:44 Сейчас в теме
У меня в измерении только ТС и Организация. Поэтому в стуктуре прописую :
Структура("Организация,ТС", Объект.Организация, Объект.ТС.ТС));
(18)
20. Rikyavik 17.04.18 20:49 Сейчас в теме
(18)Но компилятор ругается Поле объекта не обнаружено (ТС)
21. RustamZz 17.04.18 21:49 Сейчас в теме
(20) Наверное слишком мало написано ТС. Надо что бы наверняка пробрало компилятор еще раз 10 написать.
Объект.ТС.ТС.ТС.ТС.ТС.ТС.ТС.ТС.ТС.ТС
Но если не поможет я даже не знаю что посоветовать.
user705522_constantin_h; +1 Ответить
22. Rikyavik 18.04.18 09:54 Сейчас в теме
(21)Объект.ТС - табличная часть где есть реквизит ТС
Прикрепленные файлы:
23. RustamZz 18.04.18 10:13 Сейчас в теме
(22) Нужно взять это значение из ТекущихДанных на клиенте и передать на сервер в параметрах процедуры
Rikyavik; +1 Ответить
26. Rikyavik 18.04.18 11:39 Сейчас в теме
(23)
1)Нужно взять это значение из ТекущихДанных на клиенте
Процедура ТСТСПриИзменении(Элемент)
ТСТСПриИзмененииНаСервере();
ТекСтрока = Элементы.ТС.ТекущиеДанные;
КонецПроцедуры

2)передать на сервер в параметрах процедуры. Это так?

&НаСервере
Процедура ОбновитьНомерТСвТЧ( ТекСтрока = Неопределено)
ИмяТЧ = "ТС";
ТекСтрока = Объект[ИмяТЧ].НайтиПоИдентификатору(ТекСтрока);
КонецПроцедуры
27. Rikyavik 18.04.18 11:40 Сейчас в теме
(26)и прописать на клиенте ОбновитьНомерТСвТЧ(ТекСтрока);
28. Rikyavik 18.04.18 11:43 Сейчас в теме
(27)Как то с передачей на сервер немного непонятно.
30. RustamZz 18.04.18 16:08 Сейчас в теме
(28)
ТСТСПриИзмененииНаСервере(Элементы.ТС.ТекущиеДанные.ТС)
Rikyavik; +1 Ответить
24. user705522_constantin_h 35 18.04.18 10:41 Сейчас в теме
(22)А в РегистрыСведений.уатМестонахождениеТС у вас ТС есть?
25. Rikyavik 18.04.18 11:18 Сейчас в теме
Да , ТС у меня измерение
29. Rikyavik 18.04.18 13:10 Сейчас в теме
Можете подсказать как передать на сервер в параметрах процедуры?
31. user705522_constantin_h 35 18.04.18 16:12 Сейчас в теме
(29)В параметры процедуры вставляете. Что именно хотите передать?
Rikyavik; +1 Ответить
32. Rikyavik 18.04.18 16:57 Сейчас в теме
33. user705522_constantin_h 35 19.04.18 10:44 Сейчас в теме
(32)Как-то так:
&НаКлиенте 
Процедура ТСНомерТСПриИзменении(Элемент)
     ПриИзмененииТСНомерТСнаСервере(Элемент, Водитель, БортНомер); 
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииТСНомерТСнаСервере(Элемент, Водитель, БортНомер); 
     //Выполняешь требуемые действия
КонецПроцедуры
Показать
Rikyavik; +1 Ответить
34. Rikyavik 19.04.18 11:50 Сейчас в теме
(33)Есть еще вопрос
по СрезПоследних
У меня в регистре сведений уатМестонахождениеТС измерения : ТС и Организация.
В документе Перемещения Организация- реквизит а ТС - табл.часть
Мой код по срезу:

Сведения = РегистрыСведений.уатМестонахождениеТС.СрезПоследних((ТекущаяДата()), Новый Структура("Организация,ТС",Объект.Организация,Объект.ТС));


Понимаю что передавать так нельзя Объект.ТС и Объект.ТС.ТС тоже)
Но как правильно предать объект из табл.части?
35. user705522_constantin_h 35 19.04.18 15:01 Сейчас в теме
(34)Как я понимаю должно быть:
&НаКлиенте 
Процедура ТСТСПриИзменении(Элемент)
     ПриИзмененииТСТСнаСервере(Элемент); 
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииТСТСнаСервере(Элемент); 
     //Выполняешь требуемые действия
   Сведения = РегистрыСведений.уатМестонахождениеТС.СрезПоследних((ТекущаяДата()), Новый 
   Структура("Организация,ТС",Объект.Организация,Элемент.ТекущиеДанные.ТС));
   Элемент.ТекущиеДанные.Водитель = Сведения[0].Водитель;
   Элемент.ТекущиеДанные.БортНомер = Сведения[0].БортНомер;
КонецПроцедуры

Показать

Остановку в отладчике поставьте на этой строке и посмотрите:Элемент.ТекущиеДанные.ТС. Есть ли он и чему равен.
Rikyavik; +1 Ответить
36. Rikyavik 27.04.18 15:54 Сейчас в теме
Очень нужна помощь !!!! Немного переделал и надо подтянуть организацию и подазделение

&НаСервере
Процедура ТСТСПриИзмененииНаСервере(Ав)
Сведения = РегистрыСведений.уатМестонахождениеТС.СрезПоследних(, Новый Структура("Организация,ТС",Объект.Организация,Ав));

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

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




Как вытащить данные из регистра? Но при добавлении в 1с : Поле об`єкту не виявлено (Организация)
Ав.Организация = Сведения.Организация; :

Делаю так
&НаСервере
Процедура ТСТСПриИзмененииНаСервере(Ав)
Сведения = РегистрыСведений.уатМестонахождениеТС.СрезПоследних(, Новый Структура("Организация,ТС",Объект.Организация,Ав));

Ав.Организация = Сведения[0].Организация;
Ав.Подразделение = Сведения[0].Подразделение; 

КонецПроцедуры
37. user705522_constantin_h 35 28.04.18 01:16 Сейчас в теме
(36) Ав = Элемент.ТС.ТекущиеДанные; это данные строки(Элемент, а не Элементы).
Ав.Организация = Сведения[0].Организация; 
Ав.Подразделение = Сведения[0].Подразделение; 

В строке есть колонка Организация? В РегистрыСведений.уатМестонахождениеТС есть Подразделение?
38. Rikyavik 28.04.18 19:55 Сейчас в теме
Получился СрезПоследних. Как вытащить данные со среза.Пробую через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр но ругаеться компилятор :

Сведения = <<? >> ЗначениеИзСтрокиВнутр (стр) (Проверка: Тонкий клиент)
{Документ.уатПеремещениеТСиОборудования.Форма.ФормаДокумента.Форма (458,13)}: Процедура или функция с указанным именем не определена (ЗначениеИзСтрокиВнутр)

Код:
&НаСервере
Функция ТСТСПриИзмененииНаСервере(Ав)
Сведения = РегистрыСведений.уатМестонахождениеТС.СрезПоследних(, Новый Структура("Организация,ТС",Объект.Организация,Ав));
Возврат ЗначениеВСтрокуВнутр(Сведения);
КонецФункции

&НаКлиенте
Процедура ТСТСПриИзменении(Элемент)
	ТекСтрока = Элементы.ТС.ТекущиеДанные;
	Ав = ТекСтрока.ТС;
	Стр = ТСТСПриИзмененииНаСервере(Ав);
	Сведения = ЗначениеИзСтрокиВнутр(Стр);
КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот