Имя: Пароль:
1C
 
Данные объекта через точку.
,
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'"),
            Строка(ТипЗнч(Реквизиты)));
    КонецЕсли;
AdBlock убивает бесплатный контент. 1Сергей