Помогите передать параметр в запрос из значения реквизита формы

1. Dmitry888 41 28.06.21 14:36 Сейчас в теме
Добрый день.
Делаю внешнюю обработку на котором есть табличная часть "Место" с 2 колонками "Номер" и "Значение".
В запросе делаю выборку поиска "Значение" по параметру "Номер". Запрос работает в консоле, когда в ручную передаю параметр.
Но когда делаю в конфигураторе так "Запрос. УстановитьПараметр("Номер", Объект.Место.Номер)" программа пишет Поле объекта не обнаружено. Что я делаю не так? как передать параметр из данных табличной части?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kasper076 105 28.06.21 14:47 Сейчас в теме
(1) А из какой строки ТЧ значение номера берется не задумывался?
На клиенте нужно из ТекущиеДанные получить значение Номер и передать на сервер для подстановки в запрос.
	ТекущиеДанные = Элементы.Место.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено Тогда
		РезультатЗапроса = ПолучитьРезультатЗапросаНаСервере(ТекущиеДанные.Номер);
	КонецЕсли;
5. Dmitry888 41 28.06.21 15:05 Сейчас в теме
(2)вот как раз задумывался. Я по факту номер ввожу в соответствующую табличную часть и нажимаю заполнить, соответственно система не видит этот параметр. Верно мыслю?
8. kasper076 105 28.06.21 15:12 Сейчас в теме
(5) Ключевое слово Табличная часть. В ней строк может быть много, а может и вовсе не быть. Объект.Место.Номер из какой строки ТЧ Место возьмет значение колонки Номер?
7. Dmitry888 41 28.06.21 15:08 Сейчас в теме
(2)Я наверно не правильно строю логику.
Вот моя последовательность:
Запускаю обработку - заполняю Номер в табличной части колонки "Номер" и нажимаю кнопку "Заполнить", чтобы заполнилась колонка "Значение". Я где-то что-то неправильно делаю?
14. kasper076 105 28.06.21 15:31 Сейчас в теме
(7) Т.е. колонка Значения должна быть заполнена для всех строк табличной части Место?
16. Dmitry888 41 28.06.21 15:38 Сейчас в теме
(14)Да.
Смотрите как все происходит

Есть табличная часть Место, на которой есть 2 колонки Номер и Значение. ("Значение" я беру выборкой из регистра сведений по параметру "Номер". Выходит так, что я ввожу Номер в табличной части и нажимаю кнопку "Показать" и у меня по параметру "Номер" должно заполниться "Значение"
Вот код команды "Показать"

&НаСервере
Процедура ПоказатьНаСервере()
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	МестоЗначений.Номер КАК Номер,
		|	
		|	ЕСТЬNULL(МестоЗначений.Значение, ""Для данного номера не задано значение"") КАК Значение
		|ИЗ
		|	РегистрСведений.МестоЗначений КАК МестоЗначений
		|ГДЕ
		|	МестоЗначений.Номер = &Номер";

	Запрос.УстановитьПараметр("Номер ", Объект.Место.Номер); \\Вот тут ошибка не знаю как в этот параметр передать то значение которое я ввел в табличной части перед нажатием кнопки "Показать".
		
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	
Пока РезультатЗапроса.Следующий() Цикл
		
		Объект.Место.Значение = РезультатЗапроса.Значение ; 
		
	КонецЦикла
КонецПроцедуры

&НаКлиенте
Процедура Показать(Команда)
	ПоказатьНаСервере();
КонецПроцедуры
Показать
19. starjevschik 28.06.21 15:53 Сейчас в теме
(16) надо вызывать запрос из ПриИзменении номера, передававть в него то, что пользователь в поле забил...
kasper076; +1 Ответить
20. Dmitry888 41 28.06.21 15:56 Сейчас в теме
(19)И как это на моем примере сделать? Чтобы потом нажимая кнопку "Получить" я мог получать мои данные в колонке "Значение"?
3. VictorRGB2 13 28.06.21 14:52 Сейчас в теме
ну или хотя бы знать номер строки из которой передать значение в параметр
Запрос. УстановитьПараметр("Номер", Объект.Место[<Индекс строки>].Номер)
4. starjevschik 28.06.21 15:02 Сейчас в теме
В заголовке - реквизиты формы
из значения реквизита формы


в тексте - реквизит объекта
Объект.Место.Номер


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


может для начала определиться как-нибудь однозначно?
6. Dmitry888 41 28.06.21 15:06 Сейчас в теме
10. kasper076 105 28.06.21 15:16 Сейчас в теме
(4) Так Объект это основной реквизит формы и ТЧ это тоже реквизит формы. В чем противоречие-то?
9. soft_wind 28.06.21 15:13 Сейчас в теме
в ТЧ, на поле Номер, сделайте обработку события ПриИзмененииНомера()

НаКлиенте
в процедуре ПриИзменении...

текСтрока = Элементы.Место.ТекущиеДанные;
текСтрока.Значение = ПолучитьЗначениеЗапросом(текСтрока.Номер);

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

НаСервере
Функция ПолучитьЗначениеЗапросом(прНомер)
//здесь ваш запрос
КонецФункции
kasper076; +1 Ответить
11. Dmitry888 41 28.06.21 15:20 Сейчас в теме
(9)Не получается, куча ошибок с неверно переданными параметрами в процедуре
12. kasper076 105 28.06.21 15:26 Сейчас в теме
(11) Главное сюда их не пости. А то мы быстро поймем, что именно не так.
FatPanzer; +1 Ответить
13. Dmitry888 41 28.06.21 15:29 Сейчас в теме
15. soft_wind 28.06.21 15:34 Сейчас в теме
(11) да самое главное забыл спросить, (или не увидел) а формы то какие? управляемые или обычные?
с этого и начинайте свои любые вопросы!
17. Dmitry888 41 28.06.21 15:39 Сейчас в теме
18. soft_wind 28.06.21 15:46 Сейчас в теме
аа, ну тогда (9)
выложите сюда свою обработку
(как файл прикрепить)
21. soft_wind 28.06.21 16:00 Сейчас в теме
какие кнопки ?
пользователь вводит номер, нажимает Ентер (ввод) и у него автоматом заполняется Значение!
переходит к новой строчки и т.д.
22. Dmitry888 41 28.06.21 16:05 Сейчас в теме
(21)Пользователь вводит Номер(одну строку) затем номер другую строку затем следующий номер. И так 10 строк. Затем нажимает кнопку "Получить" и согласно эти номерам "которые передаются в параметре запроса" заполняется значение.
23. Dmitry888 41 28.06.21 16:06 Сейчас в теме
Согласен, какое-то извращение.
24. soft_wind 28.06.21 16:19 Сейчас в теме
так где обработка? будет исправлять ошибки.
25. Dmitry888 41 28.06.21 16:29 Сейчас в теме
26. Dmitry888 41 28.06.21 16:32 Сейчас в теме
(24)Обработку в студию:
Прикрепленные файлы:
ВнешняяОбработка1.epf
27. Dmitry888 41 28.06.21 17:19 Сейчас в теме
28. soft_wind 28.06.21 17:19 Сейчас в теме
30. Dmitry888 41 28.06.21 17:22 Сейчас в теме
(28)Спасибо. Сейчас потестю. А что это за комментарии в запросе? никогда не видел такой механизм
Прикрепленные файлы:
31. Dmitry888 41 28.06.21 17:38 Сейчас в теме
(30)А все, дошло. Можно и так комментировать ненужное.
29. Dmitry888 41 28.06.21 17:19 Сейчас в теме
Вроде легко, а малейшая путаница в логике и все, решения нет для неопытного программиста - самонедоучки.
32. soft_wind 28.06.21 17:38 Сейчас в теме
обычный коммент, очень удобно
что-то не нужное закоментарил, потом раскоментарил, при отладке использую...
что бы команды такие длинные потом не восстанавливать, после отладки все это можно потом убрать
33. soft_wind 28.06.21 17:40 Сейчас в теме
так получилось, заработало?
34. Dmitry888 41 28.06.21 17:42 Сейчас в теме
(33)Еще нет. А процедуру по кнопке "Получить" нужно закомментировать, она не актуальна?
35. soft_wind 28.06.21 17:45 Сейчас в теме
да, конечно, уберите.
по рекомендации 1С, после отладки, советуют убирать все отладочное го...но код
36. Dmitry888 41 28.06.21 17:51 Сейчас в теме
(35)ПриИзменении работает. Но хотелось по нажатию на кнопку.
37. soft_wind 28.06.21 17:54 Сейчас в теме
да можно и по нажатию, но это уже другой алгоритм, там другая логика
попробуем завтра допилить.
38. Dmitry888 41 28.06.21 17:54 Сейчас в теме
41. Dmitry888 41 29.06.21 09:05 Сейчас в теме
(37)У меня получилось через кнопку все реализовать, но если в таблице несколько строк то заполнение всех не происходит , а только той на которой стоит курсор. Нужно видимо циклом перебрать все строки
42. Dmitry888 41 29.06.21 09:57 Сейчас в теме
(37) Как тут можно перебрать все строки табличной части
&НаКлиенте
Процедура Получить(Команда)
	текСтрока = Элементы.Место.ТекущиеДанные;
	текСтрока.Значение = ПолучитьЗначениеЗапросом(текСтрока.Номер);
КонецПроцедуры


А то если у меня несколько строк, то заполняется та на которой стоит курсор
43. Dmitry888 41 29.06.21 09:59 Сейчас в теме
(42) Текущие данные - Представляет доступ к текущим данным (данным текущей строки). А нужно ко всем строкам . Цикл корректно не получается сделать(
44. kasper076 105 29.06.21 10:04 Сейчас в теме
(43) Запрос в цикле это оч некрасиво. Нужно выгрузить ТЧ в ТЗ, передать ТЗ в запрос, заполнить колонку Значение, выгрузить результат запроса в ТЗ и загрузить эту ТЗ обратно в ТЧ.
46. Dmitry888 41 29.06.21 10:25 Сейчас в теме
(44)Согласен. Оперативность страдает.
45. Dmitry888 41 29.06.21 10:05 Сейчас в теме
(42)Разобрался. Все оказалось куда проще. И действительно текущие данные тут совсем не нужны.
39. resonance 81 28.06.21 22:33 Сейчас в теме
Нельзя просто так обратиться к строке Таблицы. Нужно либо перебирать ее, либо обращаться по индексу, либо через коллекцию формы) может уже не вовремя) но тем не менее)
40. Dmitry888 41 29.06.21 09:04 Сейчас в теме
(39) Спасибо. Любая информация на этом сайте не бывает "не вовремя" )
47. soft_wind 29.06.21 10:50 Сейчас в теме
вот пример обработки по кнопке, сразу ВСЕЙ таблицы без циклов!
Прикрепленные файлы:
ВнешняяОбработкаТестФ.epf
48. dvk09 2 30.06.21 04:30 Сейчас в теме
(47) Где то слышал, что такой код
Объект.Место.Загрузить(Запрос.Выполнить().Выгрузить());

не совсем кошерный, и им можно пользоваться, только если количество строк в таблице небольшое, иначе сильно память кушать может.
По этому совсем без цикла - не всегда хорошо, лучше выборку из результата запроса обойти.
49. Dmitry888 41 05.07.21 09:34 Сейчас в теме
(48)Спасибо за замечание. Приму к сведению.
Оставьте свое сообщение

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