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