| 
    
        
     
     | 
    
  | 
Ссылки и Объекты | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Pepeega    
     11.02.21 
            ✎
    10:12 
 | 
         
        Добрый день, подскажите пожалуйста, когда нельзя пользоваться ссылкой и когда нельзя пользоваться объектом или когда лучше пользоваться ссылкой, а когда объектом?     
         | 
|||
| 
    1
    
        acht    
     11.02.21 
            ✎
    10:17 
 | 
         
        Ссылкой нужно пользоваться когда необходимо, а объектом - только по мере надобности.
 
        Задай вопрос еще раз, пожалуйста.  | 
|||
| 
    2
    
        Василий Алибабаевич    
     11.02.21 
            ✎
    10:18 
 | 
         
        (0) Нужно редактировать свойства объекта - нужно пользоваться объектом. Нужно найти объект, или организовать связь между объектами - нужно пользоваться ссылкой. В общем ссылка это адрес, а объект - само здание.     
         | 
|||
| 
    3
    
        acht    
     11.02.21 
            ✎
    10:19 
 | 
         
        (0) Тебе нужны описания типовых ощибк в коде, что-ли?     
         | 
|||
| 
    4
    
        acht    
     11.02.21 
            ✎
    10:21 
 | 
         
        (2) > В общем ссылка это адрес, а объект - само здание.
 
        Ну не совсем. Можно же организовать одновременно несколько экземпляров "здания" с одним "адресом" =)  | 
|||
| 
    5
    
        Василий Алибабаевич    
     11.02.21 
            ✎
    10:27 
 | 
         
        (4) "Можно же организовать одновременно несколько экземпляров "здания" с одним "адресом" =)"
 
        Это как? Несколько ссылок на один документ? Или элемент справочника? В общем хочу видеть пример.  | 
|||
| 
    6
    
        Pepeega    
     11.02.21 
            ✎
    10:28 
 | 
         
        (4) (2) Спасибо, плюс/минус я понял, что к чему, а вот насчет "Можно же организовать одновременно несколько экземпляров "здания" с одним "адресом" =)", не совсем понятно, можно как-то иметь несколько ссылок на один документ?     
         | 
|||
| 
    7
    
        ДенисЧ    
     11.02.21 
            ✎
    10:29 
 | 
         
        (6) 
 
        а1 = Документы.Реализация.НайтиПоНомеру("12345", Дата(2021, 1,1)); а2 = Документы.Реализация.НайтиПоНомеру("12345", Дата(2021, 1,1)); Вот тебе и две ссылки...  | 
|||
| 
    8
    
        Василий Алибабаевич    
     11.02.21 
            ✎
    10:30 
 | 
         
        (7) Нифига. Ссылка одна. Переменных, которые содержат эту ссылку - две.     
         | 
|||
| 
    9
    
        Василий Алибабаевич    
     11.02.21 
            ✎
    10:32 
 | 
         
        + (8) Обе переменные ссылаются на один и тот же объект. Это точно так же как вы оставляете свой номер телефона миллиону абонентов. Но сам номер то остается один.     
         | 
|||
| 
    10
    
        Pepeega    
     11.02.21 
            ✎
    10:32 
 | 
         
        (7) Соглашусь с (8), это же просто 2 разные переменные, а ссылка у них одна     
         | 
|||
| 
    11
    
        singlych    
     11.02.21 
            ✎
    10:33 
 | 
         
        (5) (6) стрзаменить не работает? несколько экземпляров объекта с одной ссылкой     
         | 
|||
| 
    12
    
        ДенисЧ    
     11.02.21 
            ✎
    10:33 
 | 
         
        (8) Зануда     
         | 
|||
| 
    13
    
        Василий Алибабаевич    
     11.02.21 
            ✎
    10:36 
 | 
         
        (12) Ну нафига? В терминах чистого ООП (размещение в памяти, все дела...) ссылки таки две. В терминах БД - ссылка одна. Тек что тут как посмотреть.     
         | 
|||
| 
    14
    
        acht    
     11.02.21 
            ✎
    10:36 
 | 
         
        (6) а1 = Документы.Реализация.НайтиПоНомеру("12345", Дата(2021, 1,1));
 
        о1 = а1.ПолучитьОбъект(); о2 = а1.ПолучитьОбъект(); o1.Номер = 23456; o2.Номер = 98765; Генератор = Новый ГенераторСлучайныхЧисел() Для и = 1 По 1000 Цикл Если Генератор.СлучайноеЧисло(1,1000) > 500 Тогда о1.Записать(); Иначе о2.Записать(); КонецЕсли; КонецЦикла  | 
|||
| 
    15
    
        hhhh    
     11.02.21 
            ✎
    10:38 
 | 
         
        (8) он имел в виду другое.
 
        Объект1 = Ссылка.ПолучитьОбъект(); Объект2 = Ссылка.ПолучитьОбъект(); два разных объекта.  | 
|||
| 
    16
    
        Василий Алибабаевич    
     11.02.21 
            ✎
    10:42 
 | 
         
        (14) Нет. Речь об этом :
 
        а1 = Документы.Реализация.НайтиПоНомеру("12345", Дата(2021, 1,1)); а2 = Документы.Реализация.НайтиПоНомеру("12345", Дата(2021, 1,1)); ткст = ?(а1 = а2, "Ссылка одна.", "Ссылки разные."); Сообщить(ткст); ткст = ?(Строка(а1) = Строка(а2), "Ссылка одна.", "Ссылки разные."); Сообщить(ткст);  | 
|||
| 
    17
    
        Pepeega    
     11.02.21 
            ✎
    10:45 
 | 
         
        (14) Хорошо, вопрос всё-таки отпал     
         | 
|||
| 
    18
    
        hhhh    
     11.02.21 
            ✎
    10:53 
 | 
         
        (16) в (4) об этом.     
         | 
|||
| 
    19
    
        acht    
     11.02.21 
            ✎
    10:55 
 | 
         
        (16) Мне таки лучше знать, про что я, извини. 
 
        Это вы там с ДенисЧ что-то мутите.  | 
|||
| 
    20
    
        youalex    
     11.02.21 
            ✎
    10:55 
 | 
         
        (15) у этих объектов адрес - не ссылка. Точнее, ссылка, но не та) 
 
        Если развить аналогию, то ссылка - это адрес Объект БД - это здание Объект встроенного языка (Ссылка.ПолучитьОбъект()) - план здания по адресу (ссылке)  | 
|||
| 
    21
    
        acht    
     11.02.21 
            ✎
    11:01 
 | 
         
        (20) > план здания по адресу
 
        Тогда уж бригада таджиков, которая делает ремонт по этому адресу =)  | 
|||
| 
    22
    
        Pepeega    
     11.02.21 
            ✎
    11:01 
 | 
         
        Такой вопрос возник, может тут подскажет кто "Есть "класс" ошибок с переинициализацией значений , почему лучше переменный переинициализировать внутри цикла?"     
         | 
|||
| 
    23
    
        Serg_1960    
     11.02.21 
            ✎
    11:04 
 | 
         
        (17) Всё очень просто: программисты и пользователи работает не с самими объектами, хранимыми в базе данных, а с их экземплярами (объектами, хранимые в памяти) - следовательно у одного объекта базы данных может быть много экземпляров в памяти. Так и происходит при многопользовательском режиме работы, когда несколько пользователей пытаются редактировать один и тот-же объект.     
         | 
|||
| 
    24
    
        Serg_1960    
     11.02.21 
            ✎
    11:05 
 | 
         
        (22) "Ничего не понял"(с) Повтори вопрос другими словами :)     
         | 
|||
| 
    25
    
        Rovan    
     гуру 
    11.02.21 
            ✎
    11:06 
 | 
         
        (15) а это на грани мошенничества...  жулики так продают одновременно 1 квартиру 2м покупателям !     
         | 
|||
| 
    26
    
        acht    
     11.02.21 
            ✎
    11:06 
 | 
         
        (22) Не лучше. Зависит от.
 
        Если ты, например, про создание массива со структурами, то "инициализация"- это создание нового экземпляра данных. Иначе у тебя все элемены в массиве будут указывать на единственный элемент, созданный за пределами цикла и заполненный данными последней итерации цикла. Это как раз то, про что Алибабаевич пытался начать - переменные не примитивного типа обрабатываются не по значению, а по ссылке на ее экземпляр.  | 
|||
| 
    27
    
        Pepeega    
     11.02.21 
            ✎
    11:07 
 | 
         
        (24) Слышал, что есть грубо говоря Класс ошибок с переинициализацией значений, то есть если она есть вне цикла и с ней что-то происходит, почему лучше её еще раз объявить внутри цикла, пере взаимодействием с ней?     
         | 
|||
| 
    28
    
        Pepeega    
     11.02.21 
            ✎
    11:09 
 | 
         
        (26) хм, понял подход, спасибо     
         | 
|||
| 
    29
    
        Serg_1960    
     11.02.21 
            ✎
    11:31 
 | 
         
        (27) Что есть термин "инициализация" в Вашем понимании? Платформа, при объявлении переменных, инициализирует их значением «Неопределено» по умолчанию. Поэтому рекомендуется переменным явно присваивать значение конкретного типа перед использованием. Платформа также допускает использование "явной инициализации" - присвоением нужного значения новой переменной без предварительного объявления. Некоторые называют этот способ более "правильным". Выбор за Вами.     
         | 
|||
| 
    30
    
        Dmitrii    
     гуру 
    11.02.21 
            ✎
    11:36 
 | 
         
        (0) >> когда лучше пользоваться ссылкой, а когда объектом?
 
        В общем случае. Для чтения данных - ссылка. Для изменения (модификации) - объект. Кроме того могут быть особенности обусловленные конкретным объектом. Например коллекция Движения доступна только у ДокументОбъект. А для ДокументСсылка придется получать наборы записей каждого регистра отдельно с установкой основного отбора по ссылке на регистратор.  | 
|||
| 
    31
    
        Василий Алибабаевич    
     11.02.21 
            ✎
    11:40 
 | 
         
        (29) Для начала нужно определиться что есть "грубо говоря Класс ошибок с переинициализацией значений".
 
        Но пусть себе останется абстракцией. Почему нужно переобъявлять внутри цикла? Видимо для того, чтобы надежно сбросить все свойства к значениям по умоляанию. Чтобы на следующей итерации не наступить на данне, оставшиеся с предыдущих. Можно в класс прописать метод типа Reset и там устанавливать все значения "по умолчанию". Почемуто это не сделано. Приходится тупо переобъявлять объект.  | 
|||
| 
    32
    
        Serg_1960    
     11.02.21 
            ✎
    11:57 
 | 
         
        (31) Если мы говорим о переменных примитивного типа данных, то объявлять не обязательно - достаточно присвоить значение нужного типа... но мне кажется, что некоторые путают объявление в цикле с объявлением переменных внутри модуля/функции/процедуры - намекаю на видимость переменных.     
         | 
|||
| 
    33
    
        Василий Алибабаевич    
     11.02.21 
            ✎
    12:00 
 | 
         
        (32) У товарисча из (27) переменная не примитивного типа, а целый "Класс ошибок с переинициализацией значений".     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |