|
Разница между объектом и ссылкой | ☑ | ||
---|---|---|---|---|
0
Kifsif
18.11.14
✎
00:17
|
Возьмем ДокументОбъект и ДокументСсылка. Будем, например, смотреть на флаг ОтражатьВБухгалтерскомУчете. Событие - ПередЗаписью.
Я завел две переменные ОбъектОтражатьВБухгалтерскомУчете и СсылкаОтражатьВБухгалтерскомУчете. И вычислил их значения, остановившись на точке останова в обработчике события. Нарисовал себе табличку: 1. Документ уже проведен. В нем взведен флаг отразить в БУ. ОбъектОтражатьВБухгалтерскомУчете - Истина. СсылкаОтражатьВБухгалтерскомУчете - Истина. 2. Документ был проведен, в нем БЫЛ взведены флаг отразить в БУ. Сняли флаг БУ. ОбъектОтражатьВБухгалтерскомУчете - Ложь. СсылкаОтражатьВБухгалтерскомУчете - Истина. 3. Документ был проведен, в нем не был взведен флаг отразить в БУ. ОбъектОтражатьВБухгалтерскомУчете - Ложь. СсылкаОтражатьВБухгалтерскомУчете - Ложь. 4. Новый документ. Накинута галка отразить в БУ. ОбъектОтражатьВБухгалтерскомУчете - Истина. СсылкаОтражатьВБухгалтерскомУчете - Ложь. 5. Новый документ. Нет галки отразить в БУ. ОбъектОтражатьВБухгалтерскомУчете - Ложь. СсылкаОтражатьВБухгалтерскомУчете - Ложь. Вот сижу и смотрю на эту табличку. И не могу понять 2 и 4-й случаи. Был бы очень признателен за комментарий. |
|||
1
Kifsif
18.11.14
✎
00:26
|
Вообще, хочу понять - новый документ заводится, или редактируется старый. И что-то из этих выкладок ничего не приходит на ум.
|
|||
2
H A D G E H O G s
18.11.14
✎
00:27
|
Очень интересное исследование, знать бы только смысл.
"Итак дети, все прочитали произведение великого пейсателя и готовы ответить мне, что же хотел сказать автор." |
|||
3
H A D G E H O G s
18.11.14
✎
00:27
|
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
ЭтоНовый (IsNew) Синтаксис: ЭтоНовый() Возвращаемое значение: Тип: Булево. Истина - изменяется еще ни разу не записанный документ; Ложь - документ уже записан. Описание: Определяет, записан ли документ в базу данных. Доступность: Сервер, толстый клиент, внешнее соединение. |
|||
4
Kifsif
18.11.14
✎
00:30
|
Э...э..э...
А мое исследование - оно совсем не имеет смысла? Но почему-то же поведение таково. |
|||
5
H A D G E H O G s
18.11.14
✎
00:31
|
(4) Я сомневаюсь, что кто-то захочет вникать в твою таблицу.
|
|||
6
Злопчинский
18.11.14
✎
00:34
|
Может я спорю фигню (фигня не плачь) но еще в клюшках известно что
Ссылка. Какойтофлажок И Ссылка.текущийдокумент().какойтофлажок Есть две большие разницы ???? |
|||
7
GROOVY
18.11.14
✎
00:36
|
Жесть...
|
|||
8
GROOVY
18.11.14
✎
00:38
|
(0) Чувак, реально не понимаешь что такое ссылка на объект и сам объект.
Что такое объектные блокировки? Ой, о чем это я... Смотри, есть квартира (объект) и адрес в каталоге, который модно по телефону продиктовать (ссылка), есть разница? |
|||
9
Злопчинский
18.11.14
✎
00:39
|
То есть обращаясь к обьекту при вычислении ты каждый раз заставляешь считывать актуальное значение из базы
А ссылка на то она и ссылка тире в ней же нигде не уакзпно что должно соответствовать состоянию объекта в базе Поэтому ссылку следует использовать для ССЫЛКИ на объект А объект для получения актуальных зачений реквизитов объекта |
|||
10
Злопчинский
18.11.14
✎
00:41
|
(7) это к какому посту относится?
|
|||
11
Злопчинский
18.11.14
✎
00:42
|
Хотя пример в (6) не совсем корретен
|
|||
12
H A D G E H O G s
18.11.14
✎
00:45
|
(9) Жесть.
|
|||
13
H A D G E H O G s
18.11.14
✎
00:45
|
(9) Жестище.
|
|||
14
Classic
18.11.14
✎
00:46
|
Жесть. Че реально много одинэсников, котрые даже Си не изучали?
|
|||
15
Злопчинский
18.11.14
✎
00:47
|
(12) обоснуй ;-)
|
|||
16
Обработка
18.11.14
✎
00:48
|
(0) Молодец. Не обращай внимание на жесткую критику. Системный подход к изучению 1С. Пытливый ум даст свои плоды. Так держать!.
|
|||
17
Злопчинский
18.11.14
✎
00:48
|
(14) думаю что очень много
|
|||
18
H A D G E H O G s
18.11.14
✎
00:48
|
(9) Обращаясь к Объекту, ты считываешь поля объекта, такие, какие они там есть, такие, какие ты мог в него раньше присвоить.
Обращаясь к ссылке, ты всегда получишь то, что в базе, даже если реквизиты ссылки кешированы (обращался чуть раньше, менее 20 секунд назад) - 1С все равно запросит в базе поле _version и сравнит его со значением в кеше. |
|||
19
Kifsif
18.11.14
✎
00:48
|
(8) Ладно, пусть квартира.
Второй случай: Ссылка в каталоге: в квартире есть душ. Объект: в квартире ванна. Т.е. после публикации объявления успели переделалать. Это более-менее понятно. Четвертый случай (новый объект): Объект: в квартире душ. Вот он - можно потрогать. Ссылка в каталоге: ??? Почему должна ложь-то стоять? В четвертом случае по ссылке ложь. |
|||
20
Kifsif
18.11.14
✎
00:50
|
(14) Я изучал си. Если будет разъясняющий пример на си, буду рад посмотреть.
|
|||
21
Злопчинский
18.11.14
✎
00:52
|
(18) тогда считывая реквизит через ссылку и через обект -получим одинаковые значения?
|
|||
22
H A D G E H O G s
18.11.14
✎
00:58
|
(21) Нет. Объект может:
1) Устареть. 2) Модифицироваться. |
|||
23
Команданте
18.11.14
✎
01:02
|
ни фига не понял
объект это фишка в оперативной памяти ссылка это адрес строки в таблице базы данных |
|||
24
Classic
18.11.14
✎
01:04
|
(20) не помню, в Си уже были объекты?
докОбъект - это классический экземпляр класса. докСсылка -грубо говоря идентификатор в БД. ПолучитьОбъект() -конструктор по идентификатору, при котором в переменные считываются данные с базы. Потом идет работа с уже считанными значениями. С докСсылка все не так "привычно". Фактически при обращении докСсылка.реквизит каждый раз идет считывание с БД. |
|||
25
Команданте
18.11.14
✎
01:08
|
перечитал ещё раз. не понял мук автора ветки
|
|||
26
Kifsif
18.11.14
✎
01:08
|
Спасибо всем. Разобрался. У меня в четвертом случае некорректно было все.
У нового ссылка пустая. А от пустой ссылки я получил значение свойства. Ну, и получил ложь. |
|||
27
Команданте
18.11.14
✎
01:10
|
(24) щас кэширование развито. обычно уже не идёт считывание. имхо
|
|||
28
Команданте
18.11.14
✎
01:10
|
такая длинная полоска под ником и такие детские вопросы по 1с. ты чем на досуге занимался
|
|||
29
Злопчинский
18.11.14
✎
01:11
|
(18) прошу сделать поправку на мою неснеговитость-клюшечност и пояснить азы
Объект тире это копия записи базы в оперативной памяти слэш кеше вопрос Потому как для меня-клюшечника объект это актуальный экземпляр записи. |
|||
30
Злопчинский
18.11.14
✎
01:13
|
Хотя может меня клинит не по детски и все не так
|
|||
31
Злопчинский
18.11.14
✎
01:14
|
(24) спасибо за пояснения
|
|||
32
Smallrat
18.11.14
✎
09:37
|
(24) причем гуру говорят что при обращении к реквизиту ссылки тащатся все реквизиты, что некошерно. v8: обращение к реквизиту vs запрос
|
|||
33
Ник второй
18.11.14
✎
09:41
|
(0) Ссылка.Реквизит - обращение к ЗАПИСАННЫМ данных из ИБ
Объект.Реквизит - обращение к текущим данным и не факт записанны |
|||
34
Chai Nic
18.11.14
✎
09:44
|
Даже в семерке неявно существуют объекты и ссылки. СоздатьОбъект("Справочник.XXX") - гибрид объекта с менеджером. А вот .ТекущийЭлемент() - ссылка в чистом виде.
|
|||
35
Ник второй
18.11.14
✎
09:47
|
(32) Считывается весь объект из памяти, что естественно может повлиять на производительность. Работайте с запросами
|
|||
36
Ник второй
18.11.14
✎
09:53
|
(35) Выразился не правильно.
Считывается весь объект в память из базы данных, что естественно Может повлиять на производительность, если получать данные всего объекта не требует алгоритм. Работайте с запросами. |
|||
37
СвинТуз
18.11.14
✎
09:59
|
(0) молодец
практика может быть и на первом месте такое исследование провел значит не ленивый теперь пойди книгу почитай или к (8) на курсы |
|||
38
МишельЛагранж
18.11.14
✎
09:59
|
(0) у вас не Ссылка или Объект конфликт - а проведен/не проведен.
Пока док не был проведен - объект давал картину "я снял /поставил флаг", а ссылка - давала данные БД, которые еще не изменились. После проведения - объект записался в БД, по ссылке снова стали актуальные данные. (32)>>что при обращении к реквизиту ссылки тащатся все реквизиты, - да, все ссылочные. (20) ссылки 1С к ссылкам остальных языков отношения не имеют - там ссылка на область памяти (сам объект), тут - ссылка это уникальный индекс, по которому 1С ищет у себя что-то в таблицах. |
|||
39
МишельЛагранж
18.11.14
✎
10:00
|
(18) вот вроде все правильно написал, но из-за незнания ООП - путаешь объекты и Объекты.
С большой буквы - это, конечно же, в 1С )) |
|||
40
МишельЛагранж
18.11.14
✎
10:04
|
(21) если "объект" обновил свое альтер-эго в базе, то ссылка и объект возвратят одно и то же.
Если нет - то ссылка возвратит то, что в БД, а обращение к объекту (это "объект" 1С, не забываем! он вообще ничего общего не имеет с объектами ООП!) даст некое содержимое некоего кэша в 1С, куда она временно спихнула содержимое блока памяти (отвечающего за отображение на экране - если угодно, "скриншот" экрана в виде "объектов") и держит свой "объект". |
|||
41
СвинТуз
18.11.14
✎
10:07
|
понакрутили
раньше помню на фоксе работаешь с курсором в форме и знаешь что данные не актуальные , а реальные только в базе а теперь пока дотумкаешь что где голова сломается |
|||
42
МишельЛагранж
18.11.14
✎
10:10
|
(35)>>Считывается весь объект из памяти
- дважды неправильно. Считывается весь объект и ссылочные "продолжения" его реквизитов. Отсюда и ранее распространенная ошибка SQL "превышено 256 таблиц". Когда такое неявное "разъименование" тащило за собой чуть не всю базу. И плюс один раз неправильно - в запросах 1С тоже такое возможно: неявное разъменование и дополнительные "явно не указанные" соединения "ссылочных" таблиц между собой. |
|||
43
МишельЛагранж
18.11.14
✎
10:11
|
(41) тем, кто программит не только на 1С, это давно понятно ))
|
|||
44
МишельЛагранж
18.11.14
✎
10:12
|
(37)>>теперь пойди книгу почитай или к (8) на курсы
- они там сами не знают, как у них эта вся "система ниппель" работает )) |
|||
45
МишельЛагранж
18.11.14
✎
10:14
|
(8)>>реально не понимаешь что такое ссылка на объект и сам объект.
- ничего, что вы пропустили 2 <важных> слова? )) "что такое ссылка на объект <в БД> и сам объект <в памяти-кэше>" |
|||
46
МишельЛагранж
18.11.14
✎
10:18
|
+ 42
SQL-ю указывают ссылку на другие таблицы ("дай мне весь объект вместе со значением реквизита "СправочникСсылка"!"), он и возвращает все ссылочные таблицы. А уже 1С отбирает из этого то, что "нужно" для 1С-запроса (значения полей, интерпретацию ссылок и т.д.), и отбрасывает "лишнее". |
|||
47
МишельЛагранж
18.11.14
✎
10:20
|
(22)>>Нет. Объект может:
1) Устареть. - как "объет" может "устареть", не модифицируясь при этом в своих остальных "реинкарнациях"? Разве что только испортится в БД )) |
|||
48
МишельЛагранж
18.11.14
✎
10:20
|
*объект
|
|||
49
МишельЛагранж
18.11.14
✎
10:29
|
(24)>>не помню, в Си уже были объекты?
- напоминаю: в С++ появились объекты. Но еще не ООП. >>докОбъект - это классический экземпляр класса. докСсылка -грубо говоря идентификатор в БД. - нет. докОбъект "в Си" - это не класс, а сам объект. С "ручками"-методами, и "ножками"-свойствами. А класс - это описание поведения объекта. Его "ручек" и "ножек". А еще и событий. докСсылка "в Си" - это ссылка (почти указатель, но менее "опасный") на область памяти, где содержится в данный момент считанный из БД нужный объект. Т.е. ссылка в Си сродни ярлыку на папку (объект), которая физически находится на диске по такому-то указателю. Это "безопасное" звено между вызовом из интерфейса и физическим содержимым памяти. К 1С все выше перечисленное не имеет ровным счетом никакого отношения. |
|||
50
Рэйв
18.11.14
✎
10:32
|
(0)Про то, что у нового объекта у .Ссылка все поля пустые и все булево = ложь говорили уже?
А у Объекта могло и при создании сделать Истина |
|||
51
МишельЛагранж
18.11.14
✎
10:33
|
(24)>>ПолучитьОбъект() -конструктор по идентификатору, при котором в переменные считываются данные с базы.
- вы путаете получение объекта (из базы), и работу с этим объектом. При обращении/изменении к реквизиту/та (до записи в БД) уже полученого объекта - никакого "нового" считывания объекта из БД нет, поэтому и получается расхождение между "объектом", и тем, что по ссылке в БД. >>Фактически при обращении докСсылка.реквизит каждый раз идет считывание с БД. - да, Ссылке и неоткуда больше брать данные - только считывать их снова и снова из БД (она же в 1С прсото "ссылка", и больше ничего не умеет, как только указать на данные в ТАБЛИЦЕ БД, чтобы их оттуда могли забрать). |
|||
52
МишельЛагранж
18.11.14
✎
10:38
|
(50)>>Про то, что у нового объекта у .Ссылка все поля пустые
- ссылка на <Новый> формируется на оснвое скрипта-"класса в 1С". Если разработчик заложит в платформе какое-то поле "Истина" - то ссылка тоже будет с полем Истина сразу. >>А у Объекта могло и при создании сделать Истина - потому что "объект" - уже не детерменирован "классом-скриптом", жесткая, как у <новой> ссылки, связь с "классом" разрушена-оторвана, т.е. сам объект уже может успеть поменяться после того, как 1С его сгенерировала из своих "скриптов-классов". |
|||
53
МишельЛагранж
18.11.14
✎
10:39
|
+ ...как 1С его сгенерировала из своих "скриптов-классов", и запустила в "свободное" плавание по таблицам БД ))
|
|||
54
Classic
18.11.14
✎
10:41
|
(51)
Че это я путаю? ПолучитьОбъект() - обычный конструктор. При котором как раз данные и считываются по ссылке. Никто не мешает получить два объекта по одной ссылке :) |
|||
55
МишельЛагранж
18.11.14
✎
10:43
|
(54)>>Че это я путаю?
- путаете понятия объекта в ООП (Си), и "объекта" в 1С. "ПолучитьОбъект()" - это в 1С не "конструктор", а "отделение "самостоятельного" объекта, если новый/получение существующего по ссылке". |
|||
56
МишельЛагранж
18.11.14
✎
10:45
|
(54)>>Никто не мешает получить два объекта по одной ссылке :)
- в 1С это невозможно )) Ссылка - это не "класс", а "выхлоп" скрипта-класса. И не ссылка формирует объект 1С, а этот скрипт-класс, а ссылка идет как "бесплатное приложение", однозначно уникально идентифицирующее объект внутри отдельно взятой БД )) |
|||
57
AndyD
18.11.14
✎
10:47
|
объект - это здание
ссылка - адрес здания |
|||
58
Classic
18.11.14
✎
10:48
|
(56)
Невозможно два Объекта по одной Ссылке получить? Т.е. два экземпляра класса по одному идентификатору в базе? (это если нормальным языком). Да легко. Ссылка не формирует Объект, я этого не писал. Конструктор формирует новый экземпляр класса(Объект), получая в качестве параметра идентификатор в базе(Ссылку). |
|||
59
Chai Nic
18.11.14
✎
10:48
|
Когда начинают объектную модель 1с натягивать на ООП - ни к чему хорошему это привести не может.
|
|||
60
МишельЛагранж
18.11.14
✎
10:49
|
(57) в 1С не совсем так ))
|
|||
61
МишельЛагранж
18.11.14
✎
10:55
|
(58)>>Невозможно два Объекта по одной Ссылке получить?
- невозможно >>Т.е. два экземпляра класса по одному идентификатору в базе? (это если нормальным языком). - это не нормальный язык )) Это непонимание, что такое "класс", "объект" и "ссылка" - как в ООП, так и в 1С. И что первично к чему )) >>Конструктор формирует новый экземпляр класса(Объект) - конструктор в 1С - это команда, которая и запускает скрипт-класс. На выходе - не "экзепляр класса", а "объект 1С", т.е. "собранный" из кусочков "объект 1С". assembling руками "робота"-скрипта. >>получая в качестве параметра идентификатор в базе(Ссылку). - ссылка не параметр, а скорей свойство. Параметр можно менять в широких пределах, чтобы получить разные реакции "объекта", а ссылку - только сгенерировать на точно такую же ссылку, т.е. ни для объекта, ни, тем более, для программиста - ничего в этом случае не меняется )) |
|||
62
Classic
18.11.14
✎
10:58
|
(61)
"выхлоп", "скрипт класса", "отделение объекта" - вот это нормальный язык :) |
|||
63
МишельЛагранж
18.11.14
✎
11:01
|
(59)>>Когда начинают объектную модель 1с натягивать на ООП
- гораздо чаще путают их между собой. А 1С делает вид, что ничего не происходит, называя каждый раз заново собираемый платформой монолитный кусок (объекты Документ и Справочник - не потомки "одного класса", как может показаться, а совершенно разные по происхождению) - "объектом" )) |
|||
64
МишельЛагранж
18.11.14
✎
11:03
|
(62)>>"выхлоп", "скрипт класса", "отделение объекта" - вот это нормальный язык :)
- у 1С нет своей терминологии, а где есть - она крайне нечеткая. Поэтому это наиболее близкие, в моем понимании, термины, описывающие взаимодействие сущностей внутри 1С. Но это взаимодействие - точно не ООП )) Поэтому и термины ООП к 1С не должны применяться, либо - с гигансткими оговорками, о чем, собственно (об этих оговорках), и вся текущая тема. |
|||
65
Chai Nic
18.11.14
✎
11:03
|
(63) Ну, формально они "потомки" одного абстрактного базового класса "ссылочный объект" )
|
|||
66
Chai Nic
18.11.14
✎
11:06
|
(64) Слово "класс" в применении к прикладным объектом 1с следует признать нецензурным
|
|||
67
Fragster
гуру
18.11.14
✎
11:11
|
привет программистам!
|
|||
68
Torquader
18.11.14
✎
11:11
|
Что такое "ссылка" - это некоторый специальный объект в системе, в котором хранится информация о том, как найти объект в базе данных и какой объект найти.
Если мы у ссылки запрашиваем какие-то данные объекта, то система считывает данные из базы или из кеша и отдаёт их нам, но реально в самой ссылке они не хранятся. "Объект" же - это объект в системе, где хранятся данные объекта из базы данных. То есть уже внутри самого объекта будут хранится все данные, считанные из базы, также допускается изменение этих данных с возможностью последующего сохранения в базу. Несколько разных объектов, полученных из одной ссылки, могут содержать совершенно разные данные. Кроме того, у объекта есть модуль, где можно определить некоторые процедуры и функции, выполняемые при некоторых системных событиях или вызываемые в коде для самого объекта (если они описаны с модификатором "Экспорт"). Что касается ООП в 1С, то есть только иллюзия ООП, так как есть общие свойства у всех объектов, а также у объектов одного типа (документы, справочники, регистры). Но реально никакого наследования нет, каждый объект описывается самостоятельно. Программист в конфигураторе может создать объект только определённого типа и никак иначе. |
|||
69
МишельЛагранж
18.11.14
✎
11:15
|
(65)>>Ну, формально они "потомки" одного абстрактного базового класса "ссылочный объект" )
- нет. То ли у программистов 1С такой уровень, то ли лень было делать - но кажущиеся однтипными "объекты" - имеют, на самом деле, совершенно разные свойства и методы работу. Зачастую даже одинаково называющиеся (свойства или методы), но работающие по-разному (и это совершенно не замотивированно каким-либо "назначением" объекта и чем-то подобным). |
|||
70
МишельЛагранж
18.11.14
✎
11:16
|
(68)>>Несколько разных объектов, полученных из одной ссылки
- т.е. вы тоже сторонник теории "в 1С ссылка рождает объект"? )) |
|||
71
Chai Nic
18.11.14
✎
11:17
|
(69) По крайней мере это было бы логично. Сначала создать базовый класс СсылочныйТип со свойством "Ссылка" и методами Записать(), Удалить(). Далее производные классы частично переопределяют эти методы и свойства, и добавляют свои.
|
|||
72
МишельЛагранж
18.11.14
✎
11:17
|
(68)>>так как есть общие свойства у всех объектов
- это далеко не так. Даже скажу прямо - это вообще не так. Подтверждение тому - весь гигантский зоопарк методов и свойств работы с разными объектами в 1С. |
|||
73
Torquader
18.11.14
✎
11:18
|
(70) Так если есть команда "ПолучитьОбъект", то мы можем получать объект из ссылки.
Также есть команда "Ссылка", позволяющая получить из объекта ссылку. То есть ничего удивительного в том, что из одного объекта (Ссылка) можно получить другой объект (Объект) - нет. |
|||
74
МишельЛагранж
18.11.14
✎
11:21
|
(73)>>Так если есть команда "ПолучитьОбъект", то мы можем получать объект из ссылки
- было бы неразумно считать, что завуалированная команда "создать объект" имеет непосредственное отношение к значению того слова-команды, которая в 1С призвана создавать объект )) |
|||
75
Torquader
18.11.14
✎
11:21
|
(71) Просто программистам 1С ООП не совсем знакомо.
Одинаковые методы могут вызывать однотипные низкоуровневые функции (например, для записи табличной части), но изначально это будут разные функции. Собственно, в случае ООП это также будут разные функции, просто для них будет создаваться таблица виртуальных функции, чтобы разные функции одного объекта находились по одному смещению. Так как в языке 1С все функции вызываются по наименованию, то делать виртуальные таблицы функции никто не стал - там будут таблицы соответствия между наименованием и адресом функции. |
|||
76
МишельЛагранж
18.11.14
✎
11:22
|
(71)>>Сначала создать базовый класс СсылочныйТип со свойством "Ссылка" и методами Записать(), Удалить(). Далее производные классы частично переопределяют эти методы и свойства, и добавляют свои.
- это вообще не так, хотя бы потому, что ваш с Torquader подразумеваемый "класс Ссылка" вообще не имеет каких-либо свойств и методов, тем более описанных вами )) |
|||
77
Torquader
18.11.14
✎
11:23
|
(74) Нет, а что вам не нравится, есть в системе объект, называемый "ссылка" у него есть метод "ПолучитьОбъект", который возвращает объект другого типа (для системы в целом нет никакой связи между объектами "ссылка" и "объект").
|
|||
78
МишельЛагранж
18.11.14
✎
11:24
|
(77)>>есть в системе объект, называемый "ссылка" у него есть метод "ПолучитьОбъект"
- хотя бы потому, что "в системе" не существует объекта "Ссылка" )) |
|||
79
Torquader
18.11.14
✎
11:24
|
Вообще-то, в 1С нет просто объекта "Ссылка", есть объекты "ДокументСсылка", "ДокументВидаСсылка" и т.п.
|
|||
80
Torquader
18.11.14
✎
11:25
|
А никого не удивляет, что в 1С тип - тоже объект ?
|
|||
81
МишельЛагранж
18.11.14
✎
11:26
|
(79)>> есть объекты "ДокументСсылка", "ДокументВидаСсылка"
и это тоже не объекты. Даже в интерпретации 1С )) |
|||
82
СвинТуз
18.11.14
✎
11:26
|
>>>>Невозможно два Объекта по одной Ссылке получить?
>>- невозможно Объект1=Ссылка.ПолучитьОбъект(); Объект2=Ссылка.ПолучитьОбъект(); Объект1.Наименование="111"; Объект2.Наименование="321"; Ругается что ли? странно в фоксе я мог по одному курсору две формы заполнить. |
|||
83
МишельЛагранж
18.11.14
✎
11:27
|
(80) если поймете, что в 1С вообще НЕТ никаких объектов - ни "похожих", ни "тех же самых", вам будет легче понять, что это такое, и что под этим объектным "соусом" скрывается - "объект Тип" )))
|
|||
84
H A D G E H O G s
18.11.14
✎
11:27
|
(42) Садись, два. Для Объект "ошибка 256 таблиц" возникнуть не может.
|
|||
85
Torquader
18.11.14
✎
11:27
|
(81) В общем виде - это объекты, так как у них есть свойства и методы.
|
|||
86
МишельЛагранж
18.11.14
✎
11:28
|
(82) вы два раза запустили скрипт создания объекта. Им каждому будет присвоен уникальный UUID.
Ссылка-то тут причем? |
|||
87
МишельЛагранж
18.11.14
✎
11:29
|
(84) садись, кол ))
ошибка "256 таблиц" возникает для разъименованных на более мелкие составляющие (другие таблички, которые и переполняют лимит в 256 таблиц) в запросе для SQL "объектов" 1С. |
|||
88
Torquader
18.11.14
✎
11:29
|
(86) Так объекты будут изначально содержать одни и те же данные из базы.
Кстати, уникальный идентификатор у них будет один и тот же. |
|||
89
H A D G E H O G s
18.11.14
✎
11:30
|
(47) Объект может устареть, если строку таблицы, к которой он привязан, изменит другой пользователь.
|
|||
90
Torquader
18.11.14
✎
11:30
|
(89) Ссылка тоже может "устареть", если объект из базы удалили.
|
|||
91
H A D G E H O G s
18.11.14
✎
11:31
|
(90) Нет. При обращении к реквизиту ссылки 1С всегда делает запрос к базе.
|
|||
92
Torquader
18.11.14
✎
11:32
|
(91) Или кешу.
Просто, после удаления мы получим "Объект не найден", но ссылка будет ещё живая. |
|||
93
H A D G E H O G s
18.11.14
✎
11:33
|
(92) Нет, всегда.
Если жив кеш - 1С проверяет поле _version |
|||
94
МишельЛагранж
18.11.14
✎
11:33
|
(81) объект - как термин ООП, а другого не существует, т.к. 1С не описала, что такое "объект" в её понимании, - определяется _законченностью_, т.е. есть входные параметры, есть - выходные, и _однозначностью_ поведения, а свойства и методы - уже следствие этого.
А вот поведение - это определяют родительские по отношению к потомку-объекту классы. |
|||
95
Torquader
18.11.14
✎
11:33
|
Все согласны, что ссылка - это "адрес" объекта в базе, а адрес, в общем случае, это тоже "объект", только определённого вида.
|
|||
96
H A D G E H O G s
18.11.14
✎
11:33
|
(87) ДокументОбъект не делает разыменования.
|
|||
97
H A D G E H O G s
18.11.14
✎
11:34
|
(95) Нет, не согласны, особенно с формулировкой Мишеля.
|
|||
98
МишельЛагранж
18.11.14
✎
11:34
|
(89) в SQL это не возможно. Для этого и существует блокировка таблиц/записей.
В файловом концепте 1С-базы - да, запросто. |
|||
99
Torquader
18.11.14
✎
11:34
|
(94) Есть примитивные типы, а есть - объекты - ничего другого нет.
|
|||
100
МишельЛагранж
18.11.14
✎
11:36
|
(92)>>Просто, после удаления мы получим "Объект не найден", но ссылка будет ещё живая.
- ссылка в 1С не может быть и "живая", и "объект не найден" одновременно. Т.е. даже если сделать натяжку - что "еще пока живая", и мы могли бы восстановить удаленный "объект", - но мы не можем так сделать! |
|||
101
Ник второй
18.11.14
✎
11:36
|
(42) Что за Ссылочные продолжения?
А ошибка в 256 таблиц возникала из-за обращений по точке в составном типе. |
|||
102
Torquader
18.11.14
✎
11:36
|
Ещё раз - ссылка - это данные напрямую из базы.
Объект - это создании копии данных из базы в памяти. Соответственно, никто не мешает эти данные в памяти изменить. Конечно, если существует несколько объектов, то записать мы сможем только один, но это не запрещает менять их данные без записи. |
|||
103
H A D G E H O G s
18.11.14
✎
11:37
|
(95) "докСсылка "в Си" - это ссылка (почти указатель, но менее "опасный") на область памяти, где содержится в данный момент считанный из БД нужный объект. " в (49)
- ересь. Хотя в (38) правильно "ссылки 1С к ссылкам остальных языков отношения не имеют - там ссылка на область памяти (сам объект), тут - ссылка это уникальный индекс, по которому 1С ищет у себя что-то в таблицах." Мишель Лаграндж противоречит себе в течении нескольких минут. |
|||
104
Torquader
18.11.14
✎
11:37
|
(100) Восстановить объект - да запросто - получитьУникальныйИдентификатор, УстановитьСсылкуНового, Записать.
|
|||
105
H A D G E H O G s
18.11.14
✎
11:37
|
(98) Ты путаешь Объектные и Транзакционные блокировки.
|
|||
106
МишельЛагранж
18.11.14
✎
11:37
|
(95)>>а адрес, в общем случае, это тоже "объект"
- в 1С это просто индекс, набор символов определенного формата. Т.е. больше "данные", а никак и никакой не "объект". |
|||
107
МишельЛагранж
18.11.14
✎
11:38
|
(103) изучите хотя бы основы Си.
|
|||
108
H A D G E H O G s
модератор
18.11.14
✎
11:38
|
(107) Понятно. Пока.
|
|||
109
Torquader
18.11.14
✎
11:40
|
(103) Ссылка обычно используется в тех языках, где работа с памятью напрямую невозможна или затруднена.
В Си ссылка используется для указания компилятору, что будет передаваться указатель, чтобы вместо засовывания копии объекта в стек туда попадала только ссылка на объект в памяти. Соответственно, со ссылками в других языках уже это соотносится не очень. А ссылка в 1С вообще к ссылкам не имеет никакого отношения. |
|||
110
mikeA
18.11.14
✎
11:40
|
(19) > Четвертый случай (новый объект)
в этом случае ПередЗаписью объекта в базе ещё нет. посмотри значение Ссылка.УникальныйИдентификатор() по ссылке получаются значения по умолчанию реквизитов объекта. для типа Булево это Ложь поэтому СсылкаОтражатьВБухгалтерскомУчете - Ложь. |
|||
111
Torquader
18.11.14
✎
11:42
|
Не забываем ещё, что "умная" 1С решила отличить пустую ссылку от Null и НЕОПРЕДЕЛЕНО, а также допустила возможность получения полей у пустой ссылки, которые возвращают пустые значения, а не ошибку, как должно бы было быть.
|
|||
112
Рэйв
18.11.14
✎
11:44
|
(106)В том же любимом тобой си ссылка - это тоже просто адрес в памяти. Т.е набор хексовых символов, ну и что?
|
|||
113
Fragster
гуру
18.11.14
✎
11:45
|
(111) а ничего, что NULL - отсутствие значения в целевой таблице, Неопределено - это Тип 0, а пустая ссылка - тип <> 0, ГУИД = 0? и все эти ситуации надо различать как-то.
|
|||
114
Fragster
гуру
18.11.14
✎
11:47
|
а про ошибку - это бабушка надвое сказала
|
|||
115
Torquader
18.11.14
✎
11:47
|
И, самое главное, когда код пишется на человеческом языке программирования, то мы пишем какие-то конструкции, предполагая, что они на что-то похожи и что-то делают, но для компилятора код - это просто набор команд, и он его преобразует в вызовы процедур программы по адресам в памяти - больше он ничего не знает, а в 1С, кроме того, динамическое определение типа, то есть в момент компиляции никто не знает, что будет в той или иной переменной, поэтому вызов какого-то метода объекта подставляется в общем виде.
|
|||
116
Torquader
18.11.14
✎
11:48
|
(114) В запросе будет ошибка, а в коде - нет, так как в запросе несуществующая ссылка будет равна Null.
|
|||
117
Рэйв
18.11.14
✎
11:48
|
(114)В 7.7 ошибка была в таком случае :-) А в 8 сделали получение пустого шаблона объекта при отсутсвии в базе
|
|||
118
Fragster
гуру
18.11.14
✎
11:51
|
(116) в запросе будет NULL, в коде будет приведение NULL к типу реквизита объекта
|
|||
119
Fragster
гуру
18.11.14
✎
11:52
|
вот то, что в запросе NULL <> NULL, а в коде - наоборот - это косяк :)
|
|||
120
Fragster
гуру
18.11.14
✎
11:52
|
(118)+ ошибки в запросе не будет
|
|||
121
18_plus
18.11.14
✎
11:53
|
(119) это косяк кодера, который в принципе допустил сравнение нуллов.
|
|||
122
Fragster
гуру
18.11.14
✎
11:57
|
(121) два вопроса:
1. почему нельзя сравнивать с NULL в коде? 2. Почему нельзя сравнивать с NULL в запросе? |
|||
123
Рэйв
18.11.14
✎
11:59
|
(122)Наверное это просто разные типы несмотря на то что имя одинаковое.
|
|||
124
Рэйв
18.11.14
✎
12:00
|
и если в запросе это NULL по правилам скуля, то в коде языка 1С - правила 1С, и чего они там имели в виду фик знает:-)
|
|||
125
18_plus
18.11.14
✎
12:01
|
(122) сравнивать-то можно, если понимаешь что делаешь, только зачем?
|
|||
126
Classic
18.11.14
✎
12:01
|
Любая тема, связанная с внутрями 1цэ, сводится к Нулл или Неопределено :)
|
|||
127
Fragster
гуру
18.11.14
✎
12:02
|
(124)
ВЫБРАТЬ "NULL = NULL" ГДЕ NULL = NULL Объединить все ВЫБРАТЬ "NULL <> NULL" ГДЕ NULL <> NULL против Если NULL = NULL Тогда Сообщить("NULL = NULL"); ИначеЕсли NULL <> NULL Тогда Сообщить("NULL <> NULL"); КонецЕсли; |
|||
128
Fragster
гуру
18.11.14
✎
12:03
|
(125) например чтобы проверить, что в соединяемой таблице нет значения по условию соединения?
|
|||
129
herfis
18.11.14
✎
12:03
|
(119) Не согласен. И там и там есть своя логика. В SQL - это страховка от наиболее частых ошибок. Поэтому для случаев, когда в самом деле нужна проверка на NULL - введен дополнительный оператор. В 1С никакого смысла в доп-операторе нет.
|
|||
130
Fragster
гуру
18.11.14
✎
12:04
|
(128)+ в самом запросе или в постобработке (например для создания соответствующих отсутствующих элементов)
|
|||
131
18_plus
18.11.14
✎
12:04
|
(128) специально для этого есть ЕСТЬNULL
|
|||
132
18_plus
18.11.14
✎
12:04
|
и ЕСТЬ NULL
|
|||
133
Fragster
гуру
18.11.14
✎
12:05
|
(131) ты не поверишь, н я знаю. я не про то, что чего-то нет, а про (127)
|
|||
134
Рэйв
18.11.14
✎
12:07
|
(124)Я именно об этом и говорил. Разные вещи и ведут себя по разному.
Похоже скуль вообще считает что "ничто" при любом сравнении с "ничем" дает ложь:-) |
|||
135
Рэйв
18.11.14
✎
12:08
|
(124)Вот и получается что в скуле NULL- это "ничто", а в коде NULL - это просто сущность с таким название
|
|||
136
18_plus
18.11.14
✎
12:09
|
(133) любые операции с NULL некорректны. корректной считается только проверка на NULL.
все остальные извращения на совести разработчика. |
|||
137
Fragster
гуру
18.11.14
✎
12:11
|
(136) поставлю вопрос по другому: у тебя в общих модулях есть
Функция ЕстьNULL(Значение) Возврат Значение = NULL; КонецФунцкии ? |
|||
138
herfis
18.11.14
✎
12:13
|
Просто в SQL для операций над множествами ЕСТЬ необходимость совершенно особо обрабатывать значение НЕИЗВЕСТНО в разных случах. Поэтому NULL и стоит так обособленно. В коде 1С такой необходимости нет, поэтому и обособленного поведения нет.
|
|||
139
Fragster
гуру
18.11.14
✎
12:16
|
(138) простейший пример - загружаешь прайс поставщика, для существующей номенклатуры поставщика обновляешь описание, для отсутствующей - создаешь новый элемент. вот тебе необходимость сравнения с NULL в коде. Можно, конечно, в запросе получить, типа "Выбор когда Номенклатура.Ссылка Есть NULL Тогда Истина Иначе Ложь Конец как Создавать", но стоит ли оно того?
|
|||
140
herfis
18.11.14
✎
12:19
|
(139) Пример чего? В (138) я попытался сказать, почему в коде и в запросе NULL ведет себя по-разному.
|
|||
141
Ненавижу 1С
гуру
18.11.14
✎
12:21
|
блин, все пропустил!
|
|||
142
Fragster
гуру
18.11.14
✎
12:21
|
(140) ты написал не "почему в коде и в запросе NULL ведет себя по-разному", а "коде 1С такой необходимости сравнения с NULL нет"
|
|||
143
herfis
18.11.14
✎
12:25
|
(142) Нет. Я написал, что в коде 1С нет необходимости в особой работе с NULL, как в SQL. При обработке выборки нужна просто возможность проверки на NULL. Для этого используется стандартный оператор. Всё логично, хотя на первый взгляд и не очень :)
|
|||
144
Рэйв
18.11.14
✎
12:26
|
(141)А я думал тебя забанили где-то, что очередной нуло-срач пропускаешь:-)
|
|||
145
18_plus
18.11.14
✎
12:27
|
(137) такой нет. а вот сравнение с null есть.
фактически это та же проверка на null, которую не сделали в запросе. и работает она правильно. да, получается, что (136) больше относится к запросам. |
|||
146
Серго62
18.11.14
✎
12:27
|
(127) А вот если в менеджмент студии написать:
select 1 as f1 where null <> null select 1 as f1 where null = null то оба запроса возвращают пустой результат, вот такая вот загогулина :) |
|||
147
Smallrat
18.11.14
✎
12:28
|
(126) и призывает в топик Ненавижу 1С ))
|
|||
148
Рэйв
18.11.14
✎
12:28
|
(146)Вот не лень тебе было туда лезть?:-) У меня тоже самое в консоли в 1С выдало
|
|||
149
Серго62
18.11.14
✎
12:30
|
(148) Мне если чесно, то лень, просто рядом девочка сидит у которой студия открыта :)
|
|||
150
Ненавижу 1С
гуру
18.11.14
✎
12:32
|
(147) см (141)
|
|||
151
Ненавижу 1С
гуру
18.11.14
✎
12:33
|
(149) девочка это хорошо
|
|||
152
Smallrat
18.11.14
✎
12:34
|
(150) я до туда еще не дочитал )) когда увидел что всё скатилось опять в обсуждение NULL, и подумал что кого-то тут не хватает.
|
|||
153
herfis
18.11.14
✎
12:34
|
Вопрос всем ненавистникам разного поведения NULL в запросах и коде - а как надо было сделать? NULL уже существует в SQL и обладает таким поведением, каким обладает по многим причинам. Соответственно, это значение может присутствовать в выборке и его нужно отличать от других. Что нужно было сделать разработчикам 1С в коде 1С? Задублировать поведение NULL для выражений и добавить специальный оператор просто чтобы унифицировать поведение? Хотя с точки зрения насущной необходимости это нафиг не нужно?
|
|||
154
Fragster
гуру
18.11.14
✎
12:40
|
(146) а в консоли запросов 1с пробовал написать?
|
|||
155
Рэйв
18.11.14
✎
12:42
|
(146)->(148)
|
|||
156
Рэйв
18.11.14
✎
12:43
|
(155) к (154)
|
|||
157
Fragster
гуру
18.11.14
✎
12:55
|
(155) а кто автор (146), смотрел?
|
|||
158
mikeA
18.11.14
✎
13:16
|
(151) и в конце концов свели таки всё к куям)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |