Как сравнить ссылки в 1с
В языке запросов 1С часто требуется проверить: является ли значение пустой ссылкой.
Пустая ссылка — это такое значение ссылочных объектов, когда оно имеет этот же тип, но само значение не выбрано.
На языке программирования 1С данное значение можно получить через менеджеры объекта.
- Перечисления.Пол.ПустаяСсылка(),
- Справочники.Организации.ПустаяСсылка(),
- ПланыСчетов.Хозрасчетный.ПустаяСсылка(),
- ПредопредленноеЗначение(«ПланСчетов.Хозрасчетный.ПустаяСсылка»)
Альтернативой сравнению с пустой ссылкой имеется метод Пустая() у значения ссылочного типа:
Например:
булКонтрагентВыбран = ВыбКонтрагент.Пустая();
Как же в запросе 1С сравнить на пустое значение
Для этого у нас есть несколько вариантов в зависимости от требований задачи:
1.Если требуется получить значение пустого типа.
Воспользуемся функцией ЗНАЧЕНИЕ()
Выбрать
ЗНАЧЕНИЕ (Перечисление.Пол.ПустаяСсылка)//Без вопроса в единственном числе
Либо через переданный в запрос параметр:
Выбрать
&ПустойПараметрНужногоТипа
2. Если требуется сравнить со значением не составного типа:
Выбрать
Значение(Перечисление.Пол.ПустаяСсылка)<>Значение(Перечисление.Пол.Мужской) как ЭтоБулевоИстина
Выбрать
Выбор когда &ПустойПараметрНужногоТипа ИЛИ Значение(Перечисление.Пол.Мужской) Тогда Истина Иначе Ложь Конец как ЭтоНеЖенскийПол
3. Если требуется проверка составного значения:
В этом случае значение
- может быть неопределенного типа (очищено или ни разу не выбрано)
- пустой ссылкой любого из типов (выбран тип, но не выбрано значение)
- выбранным значением любого из типов (выбрано значение)
В этом случае обычно первые два варианта считаются пустым значением, но пустыми ссылками являются только вторые.
//Мы инициализировали массив заполненных значений и сравнили его с пустым
Выбор когда ЗНАЧЕНИЕ(Значение(Перечисление.Пол.ПустаяСсылка) в (Значение(Перечисление.Пол.Мужской),Значение(Перечисление.Пол.Женский)) ИЛИ Есть NULL Тогда Истина Иначе Ложь конец ЗначениеПустое
//Мы инициализировали массив пустых ссылок и проверили вхождение в него нашего «неизвестного» значения
Выбор когда ЗНАЧЕНИЕ(Значение(Перечисление.Пол.Мужской) в (Значение(Перечисление.Пол.ПустаяСсылка),Значение(Справочник.Контрагенты.ПустаяСсылка)) Тогда Истина Иначе Ложь конец ЗначениеПустое
Также мы можем передать массив параметром
Выбрать Выбор когда ЗНАЧЕНИЕ(Значение(Перечисление.Пол.ПустаяСсылка) в (&МассивВсехПустыхСсылок) Тогда Истина Иначе Ложь конец ЗначениеПустое
Как получить значение ЛюбаяСсылка?
Еще про перечисление в запросе 1С.
Хороший дизайнер строит ясную структуру. А плохой напихивает все, что знает, и не может привести к своей мысли зрителя.
— А. Логвин
Доброго всем времени суток. Есть задача доработать обмен работающий по COM. Объекты полностью одинаковы и переносятся по COM путём сериализации/десериализации.
Задача: Необходимо доработать обмен чтобы выгружались только объекты отсутствующие в базе-приёмнике.
Вопрос: как проверить, что переносимый объект отсутствует в базе приёмнике?
Ссылку по COM не сравнить. GUID в запросе не получить. Можно ли как-то сравнить по GUID?
Кто знает, что внутри COM-объекта возвращённого запросом "Выбрать Документ.Док.Ссылка"?
Скорее всего ссылка сериализованная в строку.
Можно попробовать чтото вроде
По моему в запросе можно использовать свою функцию, если создать её как глобальную.
ссылку по ком можно сравнить так:
из ссылки можно получить уникальный идентификатор, который конвертировать в строку и эту строку передать через ком в другую базу и там провернуть обратный процесс.
Получить ГУИД в виде строки я умею. Теперь бы научиться "провернуть обратный процесс". По идее, какую-то такую конструкцию в соединении необходимо запустить: СсылкаВУдаленнойБазе=КомСоединение.Документы[ИмяДокумента].ПолучитьСсылку(новый УникальныйИдентификатор(ГУИДСсылкиВТекущейБазе));
Вот только "Новый" создаёт УникальныйИдентификатор в текущей базе насколько я понимаю. Нужно использовать что-то типа КомСоединение.NewObject("GUID").
Ещё идея. После того как у меня объект десериализуется - я могу вызовом ЭтоНовый() проверить есть ли уже такая запись в БД?
В моём случае ларчик открывается просто: вызовом ЭтоНовый() у объекта удаленной базы после десериализации.
(6) EugeneSemyonov,
не знаю правильно ли я понял твою задачу.
Привожу пример своей функции синхронизации справочника по УИДУ.
Исходные данные, есть различные обмены, которые по ОЛЕ запросом тянут нужную информацию, в том числе Справочник Автомобили в базе Раруса (Автосалон+Автосервис),
и нам нужно в бухне в справочнике номенклатура по УИД найти такой автомобиль и вернуть его, если такого нет то создать новый элемент, и его и вернуть.
Главный параметр, ОЛЕСсылка на нужный справочник, который мы получаем запросом. Возвращает уже ссылку в текущей базе приемника
З.Ы. Да, забыл сказать, там используется поиск по коду, это ищется определенная папка номенклатуры в которую валятся все вновьсозданные элементы. В общем код, вроде понятный - разберешся
Доступные типы для сравнения: Справочник, Документ, План видов расчета.
Обработка простая, пример сравнения на Рис. 1.
На мой взгляд предпочтительнее выбирать "Краткое сравнение".
Протестировано в конфигурациях: Зарплата и управление персоналом, редакция 3.1 (3.1.17.94), (3.1.20.97).
Бухгалтерия предприятия, редакция 3.0 (3.0.89.51).
Специальные предложения
Просмотры 2223
Загрузки 1
Рейтинг 6
Создание 18.03.21 10:10
Обновление 08.03.22 16:50
№ Публикации 1405284
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
См. также
Групповая корректировка записей регистров (Управляемое приложение) v 2.2 Промо
Обработка предназначена для групповой корректировки записей регистров Накопления, Сведений и Бухгалтерии. Разработана специально для Управляемого приложения.
2 стартмани
06.09.2013 72958 382 kser87 69
Предпросмотр PDF, JPG, PNG, TIFF, Word, Excel
Предварительный просмотр присоединенных файлов PDF, JPG, PNG, TIFF, Word, Excel через расширение. Позволяет изменять масштаб, поворачивать и листать. Не требует подключения к интернету и внешних компонент.
2 стартмани
01.11.2021 4520 50 TyurinArt 23
Управление платформенными обработками (расширение для типовых) [update 8.3.20]
Расширение использует недокументированную возможность для управления платформенными обработками. Например, чтобы подменить "Активные пользователи" или доработать "Конструктор запросов".
1 стартмани
07.10.2021 6028 10 SeiOkami 24
Универсальная обработка переноса данных из основной конфигурации в расширение
Обработка предназначена для разработчиков, для тех случаев, когда ранее дописанный функционал, перенесен в расширение и появляется необходимость перенести данные из объектов основной конфигурации в объекты расширения. Перенос осуществляется настройкой соответствия объектов основной конфигурации объектам расширения.
5 стартмани
05.10.2020 13354 81 biz-intel 71
Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ) Промо
Простой перенос через JSON данных между двумя базами 1С (документов, справочников, ПВХ, ПВР, счетов). Аналогична произвольной выгрузке в типовой "Выгрузка/загрузка XML", но может использоваться для отличающихся конфигураций. Подходит для любых пар баз с любым интерфейсом (управляемый + обычный). Без настроек. Не требует идентичности конфигураций и платформ. При переносе типы данных сопоставляются по наименованиям метаданных, объекты и ссылки по UID.
1 стартмани
22.10.2014 230930 4478 ekaruk 189
Улучшенная обработка универсального обмена данными в формате XML (УФ)
Улучшенная обработка "Универсальный обмен данными" с полноценными возможностями СКД для выборки данных (не только для отборов).
1 стартмани
23.06.2020 16097 170 Lem0n 1
Панель команд текущего объекта (документа, справочника и т.д.) со следующим возможностями: Редактор реквизитов, таблиц и движений текущего объекта, Анализ прав доступа к текущему объекту, Поиск ссылок на объект с отборами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Реализована всплывающей панелью в форме объекта. Подключается как расширение конфигурации (*.cfe) либо отдельными обработками.
2 стартмани
01.05.2020 17778 118 sapervodichka 3
Яндекс сервисы [Расширение]
Расширение для работы с Яндекс-сервисами (предиктор,переводчик,проверка орфографии)
1 стартмани
24.10.2019 17999 11 noprogrammer 12
Обработка "Распознавание штрихкода с помощью утилиты Zbar" для Документооборот ред. 2 Промо
В связи с тем, что стандартный функционал программы «Документооборот» ред. 2.1 дает возможность распознавания штрихкодов только форма EAN-13, данная обработка - альтернативный способ для распознавания штрихкода в программе 1С: Документооборот ред. 2 с помощью утилиты Zbar, которая распознает в том числе и в формате Code 128 (один из стандартных штрихкодов кодирования документов, например, «Управление торговлей» ред. 11), а также с возможностью поэтапно проследить все действия от распознавания до прикрепления к документу или простой загрузки в каталоги файлов в базе 1С.
5 стартмани
05.09.2016 30481 187 SEOAngels 11
Работа с файлами (обычная и управляемая форма)
Нужно загрузить файл с клиента на сервер или же, наоборот, файл загрузить с сервера на клиент, а впридачу все это на web-клиенте, да еще и асинхронно? Нет ничего проще, читай далее, как это сделать!
1 стартмани
10.06.2019 48366 261 Xershi 78
Электронная таблица средствами 1С (Версия 2.0)
Функционал электронной таблицы для программ на платформе 1С реализован на основе табличных документов. Функционал реализован в виде обработки. Большую часть формы обработки занимают листы (закладки) с табличными документами, которые выполняет роль электронной таблицы. Листы могут быть добавлены, удалены или переименованы. Ограничение по количеству листов определяется возможностью платформы. В формулах электронной таблицы можно использовать любые языковые конструкции, процедуры и функции 1С, ссылки на другие ячейки электронной таблицы расположенные в том числе и на других листах. Допустимо обращаться к ячейкам электронной таблицы по имени именованной области. В случае использования в формулах электронной таблицы данных из самой таблицы пересчет зависимых ячеек с формулами производится автоматически. Электронную таблицу можно сохранить в файл.
Как можно сравнить тип время
Подскажите как можно травнить тип времени, у меня есть datagridview в нем столбец содержит datatime.
Как сравнить два объекта по типу, если не знаешь их тип?
Добрый день! Собственно есть mdiParent, создаются разные формы, разных типов. Нужно.
Как перевести string в тип Calendar и сравнить различные даты клендаря
Здравствуйте! Возникла проблема, в переменной типа string содержится дата. Как эту переменную.
НУ можно и через параметр.
Добавлено через 18 минут
Как то вот так.
подождите.
я прав, что ответ на вопрос ТС "1C 8.x Как сравнить тип значения документа по представлению? - 1С"
ответ - НИКАК ?
потому что представление появляется ПОСЛЕ формирования выборки, то есть в запросе мы представление никак не можем ни сравнивать ни передавать ни строить на нём какие-то конструкции ? и вы уже тут решаете какой-то другой вопрос ?
я прав, что ответ на вопрос ТС "1C 8.x Как сравнить тип значения документа по представлению? - 1С"
ответ - НИКАК ?
Да, в одном запросе никак. В посте 13 я это сделал двумя запросами. В первом формируется поле представления. После выгрузки с этим полем можно уже работать как со строковым полем.
очевидно, что поле "представление" носит КРАЙНЕ вспомогательное значение, так как в запросе его использовать невозможно. соответственно, раз уж мы положились на доктрину программеров 1С, однозначно существует вариант решения Вашей проблемы каким-то обычным способом.
к примеру, такое (отобрать по типу значения) реализовано уже во всяких типовых конструкциях, имеющих составной тип.
условный пример - поле регистратор. которое даже в консоли управления имеет сначала множественный тип , из которого надо выбрать один ( например счёт на оплату покупателю ) , и только потом становится доступен выбор из документов ака счёт на оплату.
сделайте также - поле составной тип. пусть себе выбирает обвыбирается.
имхо
Однако, в списке оказываются не сами типы, а их синонимы. Поэтому и пришла мысль сравнивать не типы, а их представления. Иначе пришлось бы писать процедуру поиска типа документа по синониму. А это, как мне показалось, сложнее и дольше.
Возьмем ДокументОбъект и ДокументСсылка. Будем, например, смотреть на флаг ОтражатьВБухгалтерскомУчете. Событие - ПередЗаписью.
Я завел две переменные ОбъектОтражатьВБухгалтерскомУчете и СсылкаОтражатьВБухгалтерскомУчете. И вычислил их значения, остановившись на точке останова в обработчике события.
Нарисовал себе табличку:
1. Документ уже проведен. В нем взведен флаг отразить в БУ.
ОбъектОтражатьВБухгалтерскомУчете - Истина.
СсылкаОтражатьВБухгалтерскомУчете - Истина.
2. Документ был проведен, в нем БЫЛ взведены флаг отразить в БУ. Сняли флаг БУ.
ОбъектОтражатьВБухгалтерскомУчете - Ложь.
СсылкаОтражатьВБухгалтерскомУчете - Истина.
3. Документ был проведен, в нем не был взведен флаг отразить в БУ.
ОбъектОтражатьВБухгалтерскомУчете - Ложь.
СсылкаОтражатьВБухгалтерскомУчете - Ложь.
4. Новый документ. Накинута галка отразить в БУ.
ОбъектОтражатьВБухгалтерскомУчете - Истина.
СсылкаОтражатьВБухгалтерскомУчете - Ложь.
5. Новый документ. Нет галки отразить в БУ.
ОбъектОтражатьВБухгалтерскомУчете - Ложь.
СсылкаОтражатьВБухгалтерскомУчете - Ложь.
Вот сижу и смотрю на эту табличку. И не могу понять 2 и 4-й случаи. Был бы очень признателен за комментарий.
Вообще, хочу понять - новый документ заводится, или редактируется старый. И что-то из этих выкладок ничего не приходит на ум.
Очень интересное исследование, знать бы только смысл.
"Итак дети, все прочитали произведение великого пейсателя и готовы ответить мне, что же хотел сказать автор."
ЭтоНовый()
Возвращаемое значение:
Тип: Булево.
Истина - изменяется еще ни разу не записанный документ; Ложь - документ уже записан.
Описание:
Определяет, записан ли документ в базу данных.
Сервер, толстый клиент, внешнее соединение.
А мое исследование - оно совсем не имеет смысла?
Но почему-то же поведение таково.
(0) Чувак, реально не понимаешь что такое ссылка на объект и сам объект.
Что такое объектные блокировки? Ой, о чем это я.
Смотри, есть квартира (объект) и адрес в каталоге, который модно по телефону продиктовать (ссылка), есть разница?
То есть обращаясь к обьекту при вычислении ты каждый раз заставляешь считывать актуальное значение из базы
А ссылка на то она и ссылка тире в ней же нигде не уакзпно что должно соответствовать состоянию объекта в базе
Поэтому ссылку следует использовать для ССЫЛКИ на объект
А объект для получения актуальных зачений реквизитов объекта
(0) Молодец. Не обращай внимание на жесткую критику. Системный подход к изучению 1С. Пытливый ум даст свои плоды. Так держать!.
(9) Обращаясь к Объекту, ты считываешь поля объекта, такие, какие они там есть, такие, какие ты мог в него раньше присвоить.
Обращаясь к ссылке, ты всегда получишь то, что в базе, даже если реквизиты ссылки кешированы (обращался чуть раньше, менее 20 секунд назад) - 1С все равно запросит в базе поле _version и сравнит его со значением в кеше.
(8) Ладно, пусть квартира.
Второй случай:
Ссылка в каталоге: в квартире есть душ.
Объект: в квартире ванна. Т.е. после публикации объявления успели переделалать.
Это более-менее понятно.
Четвертый случай (новый объект):
Объект: в квартире душ. Вот он - можно потрогать.
Ссылка в каталоге: . Почему должна ложь-то стоять?
В четвертом случае по ссылке ложь.
(20) не помню, в Си уже были объекты?
докОбъект - это классический экземпляр класса. докСсылка -грубо говоря идентификатор в БД.
ПолучитьОбъект() -конструктор по идентификатору, при котором в переменные считываются данные с базы. Потом идет работа с уже считанными значениями. С докСсылка все не так "привычно". Фактически при обращении докСсылка.реквизит каждый раз идет считывание с БД.
Спасибо всем. Разобрался. У меня в четвертом случае некорректно было все.
У нового ссылка пустая. А от пустой ссылки я получил значение свойства. Ну, и получил ложь.
(18) прошу сделать поправку на мою неснеговитость-клюшечност и пояснить азы
Объект тире это копия записи базы в оперативной памяти слэш кеше вопрос
Потому как для меня-клюшечника объект это актуальный экземпляр записи.
(24) причем гуру говорят что при обращении к реквизиту ссылки тащатся все реквизиты, что некошерно. v8: обращение к реквизиту vs запрос
(0) Ссылка.Реквизит - обращение к ЗАПИСАННЫМ данных из ИБ
Объект.Реквизит - обращение к текущим данным и не факт записанны
Даже в семерке неявно существуют объекты и ссылки. СоздатьОбъект("Справочник.XXX") - гибрид объекта с менеджером. А вот .ТекущийЭлемент() - ссылка в чистом виде.
(32) Считывается весь объект из памяти, что естественно может повлиять на производительность. Работайте с запросами
(35) Выразился не правильно.
Считывается весь объект в память из базы данных, что естественно Может повлиять на производительность, если получать данные всего объекта не требует алгоритм. Работайте с запросами.
(0) у вас не Ссылка или Объект конфликт - а проведен/не проведен.
Пока док не был проведен - объект давал картину "я снял /поставил флаг", а ссылка - давала данные БД, которые еще не изменились.
После проведения - объект записался в БД, по ссылке снова стали актуальные данные.
(32)>>что при обращении к реквизиту ссылки тащатся все реквизиты,
- да, все ссылочные.
(20) ссылки 1С к ссылкам остальных языков отношения не имеют - там ссылка на область памяти (сам объект), тут - ссылка это уникальный индекс, по которому 1С ищет у себя что-то в таблицах.
(18) вот вроде все правильно написал, но из-за незнания ООП - путаешь объекты и Объекты.
С большой буквы - это, конечно же, в 1С ))
(21) если "объект" обновил свое альтер-эго в базе, то ссылка и объект возвратят одно и то же.
Если нет - то ссылка возвратит то, что в БД, а обращение к объекту (это "объект" 1С, не забываем! он вообще ничего общего не имеет с объектами ООП!) даст некое содержимое некоего кэша в 1С, куда она временно спихнула содержимое блока памяти (отвечающего за отображение на экране - если угодно, "скриншот" экрана в виде "объектов") и держит свой "объект".
- дважды неправильно. Считывается весь объект и ссылочные "продолжения" его реквизитов.
Отсюда и ранее распространенная ошибка SQL "превышено 256 таблиц".
Когда такое неявное "разъименование" тащило за собой чуть не всю базу.
И плюс один раз неправильно - в запросах 1С тоже такое возможно: неявное разъменование и дополнительные "явно не указанные" соединения "ссылочных" таблиц между собой.
(37)>>теперь пойди книгу почитай или к (8) на курсы
- они там сами не знают, как у них эта вся "система ниппель" работает ))
+ 42
SQL-ю указывают ссылку на другие таблицы ("дай мне весь объект вместе со значением реквизита "СправочникСсылка"!"), он и возвращает все ссылочные таблицы. А уже 1С отбирает из этого то, что "нужно" для 1С-запроса (значения полей, интерпретацию ссылок и т.д.), и отбрасывает "лишнее".
(22)>>Нет. Объект может:
1) Устареть.
- как "объет" может "устареть", не модифицируясь при этом в своих остальных "реинкарнациях"? Разве что только испортится в БД ))
(24)>>не помню, в Си уже были объекты?
- напоминаю: в С++ появились объекты. Но еще не ООП.
>>докОбъект - это классический экземпляр класса. докСсылка -грубо говоря идентификатор в БД.
- нет.
докОбъект "в Си" - это не класс, а сам объект. С "ручками"-методами, и "ножками"-свойствами.
А класс - это описание поведения объекта. Его "ручек" и "ножек". А еще и событий.
докСсылка "в Си" - это ссылка (почти указатель, но менее "опасный") на область памяти, где содержится в данный момент считанный из БД нужный объект.
Т.е. ссылка в Си сродни ярлыку на папку (объект), которая физически находится на диске по такому-то указателю. Это "безопасное" звено между вызовом из интерфейса и физическим содержимым памяти.
К 1С все выше перечисленное не имеет ровным счетом никакого отношения.
(0)Про то, что у нового объекта у .Ссылка все поля пустые и все булево = ложь говорили уже?
А у Объекта могло и при создании сделать Истина
(24)>>ПолучитьОбъект() -конструктор по идентификатору, при котором в переменные считываются данные с базы.
- вы путаете получение объекта (из базы), и работу с этим объектом.
При обращении/изменении к реквизиту/та (до записи в БД) уже полученого объекта - никакого "нового" считывания объекта из БД нет, поэтому и получается расхождение между "объектом", и тем, что по ссылке в БД.
>>Фактически при обращении докСсылка.реквизит каждый раз идет считывание с БД.
- да, Ссылке и неоткуда больше брать данные - только считывать их снова и снова из БД (она же в 1С прсото "ссылка", и больше ничего не умеет, как только указать на данные в ТАБЛИЦЕ БД, чтобы их оттуда могли забрать).
(50)>>Про то, что у нового объекта у .Ссылка все поля пустые
- ссылка на формируется на оснвое скрипта-"класса в 1С". Если разработчик заложит в платформе какое-то поле "Истина" - то ссылка тоже будет с полем Истина сразу.
>>А у Объекта могло и при создании сделать Истина
- потому что "объект" - уже не детерменирован "классом-скриптом", жесткая, как у ссылки, связь с "классом" разрушена-оторвана, т.е. сам объект уже может успеть поменяться после того, как 1С его сгенерировала из своих "скриптов-классов".
+ . как 1С его сгенерировала из своих "скриптов-классов", и запустила в "свободное" плавание по таблицам БД ))
(51)
Че это я путаю?
ПолучитьОбъект() - обычный конструктор. При котором как раз данные и считываются по ссылке.
Никто не мешает получить два объекта по одной ссылке :)
(54)>>Че это я путаю?
- путаете понятия объекта в ООП (Си), и "объекта" в 1С.
"ПолучитьОбъект()" - это в 1С не "конструктор", а "отделение "самостоятельного" объекта, если новый/получение существующего по ссылке".
(54)>>Никто не мешает получить два объекта по одной ссылке :)
- в 1С это невозможно ))
Ссылка - это не "класс", а "выхлоп" скрипта-класса. И не ссылка формирует объект 1С, а этот скрипт-класс, а ссылка идет как "бесплатное приложение", однозначно уникально идентифицирующее объект внутри отдельно взятой БД ))
(56)
Невозможно два Объекта по одной Ссылке получить?
Т.е. два экземпляра класса по одному идентификатору в базе? (это если нормальным языком).
Да легко.
Ссылка не формирует Объект, я этого не писал. Конструктор формирует новый экземпляр класса(Объект), получая в качестве параметра идентификатор в базе(Ссылку).
(58)>>Невозможно два Объекта по одной Ссылке получить?
- невозможно
>>Т.е. два экземпляра класса по одному идентификатору в базе? (это если нормальным языком).
- конструктор в 1С - это команда, которая и запускает скрипт-класс. На выходе - не "экзепляр класса", а "объект 1С", т.е. "собранный" из кусочков "объект 1С". assembling руками "робота"-скрипта.
>>получая в качестве параметра идентификатор в базе(Ссылку).
- ссылка не параметр, а скорей свойство. Параметр можно менять в широких пределах, чтобы получить разные реакции "объекта", а ссылку - только сгенерировать на точно такую же ссылку, т.е. ни для объекта, ни, тем более, для программиста - ничего в этом случае не меняется ))
(59)>>Когда начинают объектную модель 1с натягивать на ООП
- гораздо чаще путают их между собой. А 1С делает вид, что ничего не происходит, называя каждый раз заново собираемый платформой монолитный кусок (объекты Документ и Справочник - не потомки "одного класса", как может показаться, а совершенно разные по происхождению) - "объектом" ))
(62)>>"выхлоп", "скрипт класса", "отделение объекта" - вот это нормальный язык :)
- у 1С нет своей терминологии, а где есть - она крайне нечеткая.
Поэтому это наиболее близкие, в моем понимании, термины, описывающие взаимодействие сущностей внутри 1С.
Но это взаимодействие - точно не ООП ))
Поэтому и термины ООП к 1С не должны применяться, либо - с гигансткими оговорками, о чем, собственно (об этих оговорках), и вся текущая тема.
Что такое "ссылка" - это некоторый специальный объект в системе, в котором хранится информация о том, как найти объект в базе данных и какой объект найти.
Если мы у ссылки запрашиваем какие-то данные объекта, то система считывает данные из базы или из кеша и отдаёт их нам, но реально в самой ссылке они не хранятся.
"Объект" же - это объект в системе, где хранятся данные объекта из базы данных. То есть уже внутри самого объекта будут хранится все данные, считанные из базы, также допускается изменение этих данных с возможностью последующего сохранения в базу.
Несколько разных объектов, полученных из одной ссылки, могут содержать совершенно разные данные.
Кроме того, у объекта есть модуль, где можно определить некоторые процедуры и функции, выполняемые при некоторых системных событиях или вызываемые в коде для самого объекта (если они описаны с модификатором "Экспорт").
Что касается ООП в 1С, то есть только иллюзия ООП, так как есть общие свойства у всех объектов, а также у объектов одного типа (документы, справочники, регистры).
Но реально никакого наследования нет, каждый объект описывается самостоятельно.
Программист в конфигураторе может создать объект только определённого типа и никак иначе.
- нет.
То ли у программистов 1С такой уровень, то ли лень было делать - но кажущиеся однтипными "объекты" - имеют, на самом деле, совершенно разные свойства и методы работу. Зачастую даже одинаково называющиеся (свойства или методы), но работающие по-разному (и это совершенно не замотивированно каким-либо "назначением" объекта и чем-то подобным).
(69) По крайней мере это было бы логично. Сначала создать базовый класс СсылочныйТип со свойством "Ссылка" и методами Записать(), Удалить(). Далее производные классы частично переопределяют эти методы и свойства, и добавляют свои.
(68)>>так как есть общие свойства у всех объектов
- это далеко не так. Даже скажу прямо - это вообще не так. Подтверждение тому - весь гигантский зоопарк методов и свойств работы с разными объектами в 1С.
(70) Так если есть команда "ПолучитьОбъект", то мы можем получать объект из ссылки.
Также есть команда "Ссылка", позволяющая получить из объекта ссылку.
То есть ничего удивительного в том, что из одного объекта (Ссылка) можно получить другой объект (Объект) - нет.
(73)>>Так если есть команда "ПолучитьОбъект", то мы можем получать объект из ссылки
- было бы неразумно считать, что завуалированная команда "создать объект" имеет непосредственное отношение к значению того слова-команды, которая в 1С призвана создавать объект ))
(71) Просто программистам 1С ООП не совсем знакомо.
Одинаковые методы могут вызывать однотипные низкоуровневые функции (например, для записи табличной части), но изначально это будут разные функции.
Собственно, в случае ООП это также будут разные функции, просто для них будет создаваться таблица виртуальных функции, чтобы разные функции одного объекта находились по одному смещению.
Так как в языке 1С все функции вызываются по наименованию, то делать виртуальные таблицы функции никто не стал - там будут таблицы соответствия между наименованием и адресом функции.
(71)>>Сначала создать базовый класс СсылочныйТип со свойством "Ссылка" и методами Записать(), Удалить(). Далее производные классы частично переопределяют эти методы и свойства, и добавляют свои.
- это вообще не так, хотя бы потому, что ваш с Torquader подразумеваемый "класс Ссылка" вообще не имеет каких-либо свойств и методов, тем более описанных вами ))
(74) Нет, а что вам не нравится, есть в системе объект, называемый "ссылка" у него есть метод "ПолучитьОбъект", который возвращает объект другого типа (для системы в целом нет никакой связи между объектами "ссылка" и "объект").
Вообще-то, в 1С нет просто объекта "Ссылка", есть объекты "ДокументСсылка", "ДокументВидаСсылка" и т.п.
Читайте также: