|
Данные объекта через точку. | ☑ | ||
---|---|---|---|---|
0
OldCondom
22.05.20
✎
14:18
|
Будет ли хоть какая разница между:
Источник.Касса.СчетУчетаКасс = ПланыСчетов.Хозрасчетный.ЧековыеКнижки; и ОбщегоНазначения.ПолучитьЗначениеРеквизита(Источник, "Касса").СчетУчетаКасс = ПланыСчетов.Хозрасчетный.ЧековыеКнижки; Я вот не пойму, если у нас уже Объект, а не ссылка, значит все соединения уже были сделаны, или как? |
|||
1
palsergeich
22.05.20
✎
14:22
|
(0) Получена ссылка на кассу, а вот ее реквизиты - нет
Источник.Касса - обращения к Бд не будет Источник.Касса.СчетУчетаКасс - обращение к БД будет так как ты разыменовываешь ссылку |
|||
2
dezss
22.05.20
✎
14:23
|
Не все объекты, а только тот, который источник.
Тебе скорей надо ОбщегоНазначения.ПолучитьЗначениеРеквизита(Источник.Касса, "СчетУчетаКасс") |
|||
3
palsergeich
22.05.20
✎
14:23
|
В твоем случае правильный рариант будет такой
ОбщегоНазначения.ПолучитьЗначениеРеквизита(Источник.Касса, "СчетУчетаКасс") = ПланыСчетов.Хозрасчетный.ЧековыеКнижки; |
|||
4
OldCondom
22.05.20
✎
14:24
|
Все, понял. Спасибо большое!
|
|||
5
ДенисЧ
22.05.20
✎
14:27
|
Что такое источник?
|
|||
6
aleks_default
22.05.20
✎
15:28
|
(5)Параметр подписки на событие или обработчика события в КД
|
|||
7
ДенисЧ
22.05.20
✎
15:40
|
(6) И тогда какой смысл имеет конструкция
Источник.Касса.СчетУчетаКасс ? Писать в ссылку реквизита данные? |
|||
8
dezss
22.05.20
✎
15:50
|
(7) Не в ссылку реквизита, а в реквизит ссылки)))
Ну может это не запись, а сравнение, как вариант. |
|||
9
ДенисЧ
22.05.20
✎
15:52
|
(8) В реквизит ссылки реквизиты ))
|
|||
10
vde69
22.05.20
✎
15:59
|
а ты уверен, что результат будет одинаковый для несохраненного объекта?
|
|||
11
aleks_default
22.05.20
✎
16:19
|
(10)Получается же реквизит ссылки, а не объекта. Так что нет разницы сохранен он или нет
|
|||
12
palsergeich
22.05.20
✎
16:23
|
(7) А кто сказал что это операция присваивания, а не сравнения?
|
|||
13
ДенисЧ
22.05.20
✎
16:24
|
(12) А кто сказал, что нет? ))
|
|||
14
palsergeich
22.05.20
✎
16:25
|
(13) Если нет, то выбьет в ошибку, а так как ТС пропал - значит всехорошо
|
|||
15
palsergeich
22.05.20
✎
16:26
|
Но по логике кода таки больше похоже именно на условие
|
|||
16
dezss
22.05.20
✎
16:44
|
(11) Но у объекта может быть изменена ссылка Касса.
|
|||
17
Timon1405
22.05.20
✎
16:53
|
так-то можно сразу писать
РодительКод= Общегоназначения.ЗначениеРеквизитаОбъекта(СсылкаНом,"Родитель.Код") |
|||
18
vde69
22.05.20
✎
17:36
|
(11) еще один :)
мда, как Вас к программированию вообще допускают? в (0) варианты совершенно не равноценные по результату..... |
|||
19
RomanYS
22.05.20
✎
17:55
|
(18) открой ОбщегоНазначения.ПолучитьЗначениеРеквизита и посмотри. Я открыл в УПП. Кроме ссылки она ничего не съест.
Для ссылки результат будет одинаков, для не ссылки - второй вывалится с ошибкой. Второй вариант со всех сторон бредовый, правильный аналог в (2). |
|||
20
mzelensky
22.05.20
✎
17:59
|
(0) ЧТо мешает вот так сделать? НА сколько я помню, вложенность поддерживается:
ОбщегоНазначения.ПолучитьЗначениеРеквизита(Источник, "Касса.СчетУчетаКасс") = ПланыСчетов.Хозрасчетный.ЧековыеКнижки |
|||
21
mzelensky
22.05.20
✎
18:02
|
(20) - это если "Источник" является Ссылкой.
Если "Источник" - это некая структура, то тогда так: ОбщегоНазначения.ПолучитьЗначениеРеквизита(Источник.Касса, "СчетУчетаКасс") = ПланыСчетов.Хозрасчетный.ЧековыеКнижки |
|||
22
RomanYS
22.05.20
✎
18:20
|
(20) Не знаю как в БСП. Судя по коду УПП вложенность не поддерживается, точнее чтобы она поддерживалась нужно структуру передавать, не строку "Касса.СчетУчетаКасс"
... Если ТипЗнч(ИменаРеквизитов) = Тип("Структура") Тогда СтруктураРеквизитов = ИменаРеквизитов; ИначеЕсли ТипЗнч(ИменаРеквизитов) = Тип("Строка") Тогда СтруктураРеквизитов = Новый Структура(ИменаРеквизитов);; Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверный тип второго параметра ИменаИлиСтруктураРеквизитов: %1'"), Строка(ТипЗнч(ИменаРеквизитов))); КонецЕсли; ТекстПолей = ""; Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Ключ)); Псевдоним = СокрЛП(КлючИЗначение.Ключ); ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + " | " + ИмяПоля + " КАК " + Псевдоним; КонецЦикла; ... |
|||
23
mzelensky
22.05.20
✎
18:32
|
(22) Гомно ваше УПП:
Вызов РеквизитыКарты = ОбщегоНазначенияРТКлиентСервер.ЗначенияРеквизитовОбъекта(Карта, "ВидДисконтнойКарты, Магазин.НоваяПрограммаЛояльности"); Функция "ОбщегоНазначенияРТКлиентСервер.ЗначенияРеквизитовОбъекта" : РезультатФункции = Новый Структура; Если Ссылка = Неопределено Тогда Возврат РезультатФункции; КонецЕсли; Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда Если ПустаяСтрока(Реквизиты) Тогда Возврат РезультатФункции; КонецЕсли; Реквизиты = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Реквизиты, ","); КонецЕсли; СтруктураРеквизитов = Новый Структура; Если ТипЗнч(Реквизиты) = Тип("Структура") Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда СтруктураРеквизитов = Реквизиты; ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда Для Каждого Реквизит Из Реквизиты Цикл СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит); КонецЦикла; Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты))); КонецЕсли; ТекстПолей = ""; Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл // ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Ключ)); Псевдоним = СокрЛП(КлючИЗначение.Ключ); ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + " | " + ИмяПоля + " КАК " + Псевдоним; // РезультатФункции.Вставить(КлючИЗначение.Ключ); КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ " + ?(ВыбратьРазрешенные, "РАЗРЕШЕННЫЕ", "") + " |" + ТекстПолей + " |ИЗ | " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы |ГДЕ | ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка |"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ЗаполнитьЗначенияСвойств(РезультатФункции, Выборка); КонецЕсли; Возврат РезультатФункции; |
|||
24
AneJIbcuH
22.05.20
✎
18:52
|
(22) Релиз какой? Там доработаны (как минимум в этом году) эти функции.
// Приведение реквизитов к единому формату. СтруктураПолей = Новый Структура; Если ТипЗнч(Реквизиты) = Тип("Структура") Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда СтруктураПолей = Реквизиты; ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда Для Каждого Реквизит Из Реквизиты Цикл Попытка ПсевдонимПоля = СтрЗаменить(Реквизит, ".", ""); СтруктураПолей.Вставить(ПсевдонимПоля, Реквизит); Исключение // Если псевдоним не является ключом. // Поиск ошибки доступности полей. Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты); Если Результат.Ошибка Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: %1'"), Результат.ОписаниеОшибки); КонецЕсли; // Не удалось распознать ошибку, проброс первичной ошибки. ВызватьИсключение; КонецПопытки; КонецЦикла; Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверный тип второго параметра Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: %1'"), Строка(ТипЗнч(Реквизиты))); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |