![]() |
|
Объект в параметр запроса | ☑ | ||
---|---|---|---|---|
0
FromRome
02.07.16
✎
13:08
|
Добрый день! подскажите пожалуйста, как правильно передать текущий объект (еще не записанный) параметром в запрос, например можно в запросе использовать ТЧ документа передав его параметром &Товары. А как передать сам объект (Знаю что можно передавать типизированные поля ТаблицыЗначений)? Все мои попытки приводят к ошибке метода Запрос.Выполнить().
Пример: ТекОбъект = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.Договор")); Запрос = Новый запрос; ЗАпрос.Текст = "ВЫБРАТЬ | Договор.Пациент, | Договор.Организация |ПОМЕСТИТЬ ТДог |ИЗ | &ТекОбъект КАК Договор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТДог.Пациент, | ТДог.Организация |ИЗ | ТДог КАК ТДог" ; Запрос.УстановитьПараметр("ТекОбъект", ТекОбъект); Результат = Запрос.Выполнить(); ТЗ = Результат.Выгрузить(); |
|||
1
ovrfox
02.07.16
✎
13:10
|
Текущий объект, который не записан , отсутсвует в базе данных , поэтому к нему нельзя обратиться через запрос.
Его прежнее состояние, которое было до начала редактирования можно получить запросом по парамерту Ссылка |
|||
2
4St
02.07.16
✎
13:13
|
Добрый день!
Какая-то жесть, если честно. Для чего это? Проще сделать новую ТаблицуЗначений с 2 колонками и 1 строкой (Пациент,Организация). 6 строк кода (можно даже 5). Задача, кажется, вырвана из контекста. |
|||
3
FromRome
02.07.16
✎
13:19
|
(2) Я задачу так и реализовал, сделал ТЗ с 2 колонками и 1 строкой и передал ее параметром, но возник интересующий меня вопрос, можно ли как то по другому передать текущие данные формы в запрос? без ТЗ
К примеру табличную часть можно передать в запрос следующимм образом: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Т_ДоговорУслуги.Услуга, | Т_ДоговорУслуги.Цена |ПОМЕСТИТЬ ВТДок |ИЗ | &Услуги КАК Т_ДоговорУслуги |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТДок.Услуга, | ВТДок.Цена |ИЗ | ВТДок КАК ВТДок"; Запрос.УстановитьПараметр("Услуги", Услуги); А можно ли передать весь объект в запрос? не используя условие что Документ.Ссылка = &Ссылка |
|||
4
4St
02.07.16
✎
13:24
|
(3) Можно попробовать так
Запрос.Текст = "ВЫБРАТЬ | &Пациент, | &Организация |ПОМЕСТИТЬ ТДог |; | |ВЫБРАТЬ | ТДог.Пациент, | ТДог.Организация |ИЗ | ТДог КАК ТДог" ; Запрос.УстановитьПараметр("Пациент", ТекОбъект.Пациент); Запрос.УстановитьПараметр("Организация", ТекОбъект.Организация); |
|||
5
FromRome
02.07.16
✎
13:27
|
(4) а без секции "ИЗ Документ.Договор как Договор" разве будет работать?
|
|||
6
FromRome
02.07.16
✎
13:32
|
вот собственно моя функция:
Интерес чисто академический, варианты передачи параметров в запрос для выходной таблицы, кроме как Тз с описанием типов полей. Суть задачи в том что нужно проверять что конкретно взятая медицинская организация может принимать детей и конкретно взятый пациент это непосредственно ребенок, проверку нужно производить при заполнении формы документа ( при изменении пациента и организации ) ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Пациент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты")); ТЗ.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации")); ЗначениеТЗ = ТЗ.Добавить(); ЗначениеТЗ.Пациент = Объект.Пациент; ЗначениеТЗ.Организация = Объект.Организация; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Т_Договор.Пациент, | Т_Договор.Организация |ПОМЕСТИТЬ ТТ |ИЗ | &ТекОбъект КАК Т_Договор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Контрагенты.ТипВозраста, | Контрагенты.Ссылка |ПОМЕСТИТЬ ВТК |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Ссылка В | (ВЫБРАТЬ | ТТ.Пациент | ИЗ | ТТ КАК ТТ) | И Контрагенты.ТипВозраста = ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.ТИПВОЗРАСТА.РЕБЕНОК) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТТ.Пациент, | ТТ.Организация, | ВТК.ТипВозраста |ИЗ | ТТ КАК ТТ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТК КАК ВТК | ПО ТТ.Пациент = ВТК.Ссылка |ГДЕ | ТТ.Организация В | (ВЫБРАТЬ | Организации.Организация | ИЗ | РегистрСведений.Организации КАК Организации | ГДЕ | Организации.ПринимаетДетей)"; Запрос.УстановитьПараметр("ТекОбъект", ТЗ); Результат = Запрос.Выполнить(); Если Результат.Выбрать().Следующий() Тогда Возврат Истина; Иначе Возврат Ложь; КонецЕсли; |
|||
7
4St
02.07.16
✎
13:39
|
(6)
Тогда хотя бы так: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.ТипВозраста, | Контрагенты.Ссылка |ПОМЕСТИТЬ ВТК |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Ссылка=&Пациент | И Контрагенты.ТипВозраста = ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.ТИПВОЗРАСТА.РЕБЕНОК) |; | |ВЫБРАТЬ Первые 1 1 |ИЗ ВТК Внутреннее соединение РегистрСведений.Организации как РС_Орг По РС_Орг.Организация=&Организация и РС_Орг.ПринимаетДетей)"; Запрос.УстановитьПараметр("Пациент", Объект.Пациент); Запрос.УстановитьПараметр("Организация", Объект.Организация); Результат = Запрос.Выполнить(); Возврат Не Результат.Пустой(); Можно сократить вообще до одной таблицы. |
|||
8
4St
02.07.16
✎
13:53
|
А если отойти от академизма в запросах и вернуться к академизмам в разработке, то задач в действительности две:
1) Проверить, что конкретно взятая медицинская организация может принимать детей 2) Проверить, что конкретно взятый пациент это непосредственно ребенок. И они должны выполняться разными запросами. Да, их можно выполнить и единым пакетом, и даже вложенными запросами, но сами запросы разные, и миксовать их вместе - излишнее усложнение. |
|||
9
FromRome
02.07.16
✎
14:11
|
(8) спасибо за идеи :)
|
|||
10
FromRome
02.07.16
✎
14:15
|
(8) Просто хочется все делать за 1 обращение к бд 1 запросом)
|
|||
11
makfromkz
02.07.16
✎
14:20
|
запросы могут быть разные, типо в 1 запрос можно запихать 100500 простых запросов
|
|||
12
sash-ml
02.07.16
✎
15:01
|
объект нельзя, как SQL поймет что там?.
Возможно когда нибудь будет реализована поддержка ХМЛ объектов. https://msdn.microsoft.com/ru-ru/library/ms187752.aspx |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |