Имя: Пароль:
1C
 
Как обратиться в выражении языка компоновки данных к реквизиту параметра?
0 TormozIT
 
гуру
19.05.25
19:03
Чтобы обратиться в выражении языка компоновки данных к реквизиту параметра без функций модулей пробовал на 8.3.27 следующие способы:

Способ 1
ВЫРАЗИТЬ(&ЧасовойПояс, "Справочник.ЧасовыеПояса").Смещение

Выдает синтаксическую ошибку без конкретики

Способ 2
&ЧасовойПояс.Смещение

Синтаксическую проверку проходит, но при выводе результата компоновки странная ошибка

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
Ошибка при вызове метода контекста (Вывести)
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка вывода результата
по причине:
Ошибка при выводе результата
по причине:
Ошибка получения данных
по причине:
Не установлено значение параметра "ЧасовойПояс.Смещение"
[ОшибкаНастроекКомпоновкиДанных]

Это вообще возможно?
1 Мультук
 
гуру
19.05.25
19:18
(0)

"Типовые" функции тоже нельзя ?

ОбщегоНазначения.ЗначениеРеквизитаОбъекта(..)
2 АнализДанных
 
19.05.25
20:46
(0) разве в выразить не должно быть "КАК", или в компановке другой синтаксис?
3 d4rkmesa
 
гуру
19.05.25
21:55
(0) Похоже, так не получится. ВЫРАЗИТЬ в выражении СКД не позволяет обращаться к реквизитам, даже если указать явно Тип значения для вычисляемого поля (поэкспериментировал немного, без реквизита функция верно работает для параметра произвольного типа). Только в наборе данных.
4 PR
 
19.05.25
23:14
(0) (&ЧасовойПояс).Смещение
5 TormozIT
 
гуру
19.05.25
23:31
(4) У тебя это работает?
6 Asmody
 
19.05.25
23:42
в источнике
ВЫБРАТЬ &Параметр КАК Параметр;

и дальше всё как обычно
7 PR
 
19.05.25
23:52
(5) Когда я столкнулся с такой же проблемой, то да, решил так, работало
Только "маленький" нюанс, работало в тексте запроса
Про обращение в выражении языка компоновки данных (что бы это не значило) так не делал и не пробовал
8 TormozIT
 
гуру
20.05.25
00:00
(6) Запроса нет. Ради такой мелочи не хочется отдельный набор данных запрос добавлять. Но да, так работает.
9 Asmody
 
20.05.25
00:03
(8) а как по другому? точнее, с какого перепоя СКД должна узнать, что у тебя там какой-то UUID должен во что-то развернуться? От колонки ТЗ в объектном источнике тоже реквизит взять не получится (вроде как)
10 PR
 
20.05.25
00:18
Что-то я уже потерялся, что и где делается, но добавлю еще пять копеек
Если обращение к реквизиту ТЗ, полученной примерно как "ИЗ &ТЗ", то сначала нужно все выбрать во временную таблицу, а потом уже лазить через точку
11 TormozIT
 
гуру
20.05.25
06:34
(9) Придумываешь. В выражении компоновки от любого ссылочного поля реквизит через точку без проблем получается.
12 Asmody
 
20.05.25
07:08
(11) от ссылочного поля чего?
13 TormozIT
 
гуру
20.05.25
07:41
(12) Любого набора данных - объединения, запроса, объекта.
14 Fish
 
гуру
20.05.25
09:13
(10) "сначала нужно все выбрать во временную таблицу, а потом уже лазить через точку"
Выбрать мало, надо ещё и выразить.
15 TormozIT
 
гуру
20.05.25
09:45
(1) Если у тебя в таблице набора данных компоновки 1000 строк, то в вычисляемом поле с таким выражением сколько раз вызовется ОбщегоНазначения.ЗначениеРеквизитаОбъекта(..)?
16 Мультук
 
гуру
20.05.25
09:55
(15)

Я считал, что если это выражение параметра - то один раз.
Но вероятно "всё совсем по другому"
17 Eiffil123
 
20.05.25
10:12
(0) а если сделать еще один параметр (скрытый) и в выражении его прописать получение реквизита через функцию БСП?
18 Asmody
 
20.05.25
10:15
Вот такая картина получается:




где:

Номенклатура - поле набора данных - объект
Товар - параметр &Товар
ТоварВП - выч.поле с выражением &Товар
ТоварВПОМ - выч.поле с выражением __.Э(&Товар)
ТоварЗ - из источника данных - запрос ВЫБРАТЬ &Товар
ТоварЗВ - из источника данных - запрос ВЫБРАТЬ ВЫРАЗИТЬ(&Товар КАК Справочник.Номенклатура)
ТоварП - Пользовательское поле &Товар

тип значения у всех полей стоит, где это доступно

по "плюсикам" видно, что тип определяется только у поля источника данных - объект и явно типизированного поля запроса.
19 Asmody
 
20.05.25
10:24
++
при выводе реквизита в отчет в XMLке для источника данных запрос добавляется строка:

ВЫРАЗИТЬ(&Товар КАК Справочник.Номенклатура) КАК ТоварЗВ,
ПРЕДСТАВЛЕНИЕССЫЛКИ(ВЫРАЗИТЬ(&Товар КАК Справочник.Номенклатура)) КАК ТоварЗВПредставление,
ВЫРАЗИТЬ(&Товар КАК Справочник.Номенклатура).Код КАК Поле1


а источник данных - объект превращается в объединение, где к исходному источнику - объекту добавляется запрос:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
	СправочникНоменклатура.Ссылка КАК Ссылка,
	СправочникНоменклатура.Код КАК Код
ИЗ
	Справочник.Номенклатура КАК СправочникНоменклатура
ГДЕ
	СправочникНоменклатура.Ссылка В(&Ссылка)
20 d4rkmesa
 
гуру
20.05.25
10:41
(11) Точно ли? Если в источнике данных без автозаполнения выбрано это поле без галочки "использовать дочерние", то по идее ошибку выдает при попытке прочитать реквизит в выражении.
21 TormozIT
 
гуру
20.05.25
11:55
(17) Такая модификация способа (1) уже пригодна, если функции модулей разрешены.