Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Учусь читать код, не понятна одна конструкция / 10 сообщений из 10, страница 1 из 1
29.02.2012, 16:24
    #37684730
Кантачес
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учусь читать код, не понятна одна конструкция
Пример:
Товар = Справочники.Номенклатура.НайтиПоКоду(1).ПолучитьОбъект();

НайтиПоКоду() - метод модуля менеджера справочника Номенклатура. С помощью него получаем объект (запись) из всего справочника.
ПолучитьОбъект() - метод модуля объекта справочника Номенклатура. С помощью него читаем в переменную-структуру "Товар" значения полученного объекта.
...
Рейтинг: 0 / 0
29.02.2012, 16:34
    #37684750
rigus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учусь читать код, не понятна одна конструкция
Найтипокоду возвращает ссылку.
Получитьобъект - на основе ссылки возвращает объект
ссылка используется для чтения данных, а объект для модификации данных.
Соответственно из примера видно что в переменную товар заводится объект номенклатуры с кодом 1. следующими строками
должна идти модификация аля
Товар = Справочники.Номенклатура.НайтиПоКоду(1).ПолучитьОбъект();
Товар.Наименование ="Товар с кодом 1";
Товар.Записать();
...
Рейтинг: 0 / 0
29.02.2012, 17:06
    #37684813
Кантачес
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учусь читать код, не понятна одна конструкция
rigus,
да, по названию метода ПолучитьОбъект() понятно, что в итоге делает эта конструкция. Правильно ли понял, что "Справочники.Номенклатура.НайтиПоКоду(1)." возвращает промежуточный объект (либо структуру) в которой хранится ссылка. У данного объекта\ссылки есть метод ПолучитьОбъект(), который считывает в переменную "Товар" значения найденного элемента справочника Номенклатура.
...
Рейтинг: 0 / 0
29.02.2012, 17:14
    #37684838
Кантачес
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учусь читать код, не понятна одна конструкция
Извините за сумбур. Постарался более понятно. Правильно ли я понял ваш ответ?

Товар = Справочники.Номенклатура.НайтиПоКоду(1);
Товар = ПромежуточныйОбъект.ПолучитьОбъект();

что-то вроде псевдокода. ПромежуточныйОбъект - объект, либо структура в которой лежит ссылка на найденный элемент справочника. У данного объекта\структуры есть метод ПолучитьОбъект(), который берет ссылку и по ней из базы копирует в переменную "Товар" элемент справочника.
...
Рейтинг: 0 / 0
29.02.2012, 18:13
    #37684924
Last1Cmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учусь читать код, не понятна одна конструкция
ПолучитьОбъект()
по ссылке получает скажем так "конкретный экземпляр класса" и уже в нем можем получать через разименование доступ к полям и методам данного конкретного экземпляра объекта которой был найден
...
Рейтинг: 0 / 0
29.02.2012, 18:15
    #37684926
rigus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учусь читать код, не понятна одна конструкция
Еще раз
ссылка предназначена только для чтения данных. Т.е. если у Вас есть ссылка на объект, то Вы можете получить все его свойства
т.е. грубо говоря это рекордсет
и на стороне скуля выполняется запрос к таблице возвращающий все поля элемента.

Например
Товар = Справочники.Номенклатура.НайтиПоКоду(1);
Сообщить("("+Товар.Код+") "+Товар.Наименование+" в группе "+Товар.Родитель.Наименование);

Если нам нужно модифицировать объект, то мы получаем на основании ссылки объект и уже работаем с ним.
Также следует помнить следующее, т.к. 1с кеширует данные, то получение реквизитов через точку может вернуть устаревшие данные (если в промежутке между получением ссылки и обращением через точку была модификация объекта)
...
Рейтинг: 0 / 0
29.02.2012, 19:53
    #37685031
Александр Пузаков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учусь читать код, не понятна одна конструкция
КантачесПример:
Товар = Справочники.Номенклатура.НайтиПоКоду(1).ПолучитьОбъект();

НайтиПоКоду() - метод модуля менеджера справочника Номенклатура. С помощью него получаем объект (запись) из всего справочника.
ПолучитьОбъект() - метод модуля объекта справочника Номенклатура. С помощью него читаем в переменную-структуру "Товар" значения полученного объекта.

Не так.
НайтиПоКоду() - метод менеджера справочника . Возвращает ссылку.
ПолучитьОбъект() - метод менеджера справочника . Возвращает объект.

Между объектом и ссылкой большая разница. Ссылка - это только идентификатор объекта. Например, для компьютера ссылкой будет его название, а самим объектом будет непосредственно компьютер. По названию (ссылке) мы всегда опознаем компьютер и можем даже вспомнить, где он находится, однако, чтобы произвести с ним какие либо действия (включить, выключить, установить на него ПО), нам нужен сам объект (компьютер).
Ссылка - предназначена для опознавания, объект - для манипулирования.
...
Рейтинг: 0 / 0
01.03.2012, 09:53
    #37685727
Кантачес
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учусь читать код, не понятна одна конструкция
rigus, Last1Cmen, Александр Пузаков , спасибо за разъяснение. В подобных ситуациях, если не вызвать метод ПолучитьОбъект() в переменную будет записана ссылка на объект, а не сам объект. При этом мы так же можем вызывать методы объекта и читать его свойства (но только не изменять их).
Сбила с толку такая конструкция - в ООП обычно пишем Объект.Метод, а тут Объект.Метод.Метод, т.е. будто у метода ПоучитьПоКоду() есть метод ПолучитьОбъект().
...
Рейтинг: 0 / 0
01.03.2012, 12:31
    #37686071
Last1Cmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учусь читать код, не понятна одна конструкция
Кантачес rigus, Last1Cmen, Александр Пузаков , спасибо за разъяснение. В подобных ситуациях, если не вызвать метод ПолучитьОбъект() в переменную будет записана ссылка на объект, а не сам объект. При этом мы так же можем вызывать методы объекта и читать его свойства (но только не изменять их).
Сбила с толку такая конструкция - в ООП обычно пишем Объект.Метод, а тут Объект.Метод.Метод, т.е. будто у метода ПоучитьПоКоду() есть метод ПолучитьОбъект().

ммм ну тут удобнее получается и не обязательно расписывать этапы (сначала ссылка потом сам объект) а можно в одну строку
...
Рейтинг: 0 / 0
01.03.2012, 12:32
    #37686072
pail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учусь читать код, не понятна одна конструкция
Кантачес,
Считайте, что Ссылка и Объект - это сущности разных классов. У ссылки и свойства свои есть, и методы, не те же самые, что у Объекта. А есть еще и Менеджер, и Список, и Выборка...
В семерке точно так же было, хотя и все эти по сути разные классы под одним именем скрывались. Только в документации попадались регулярно сноски "метод применим только для созданных функцией СоздатьОбъект()".
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Учусь читать код, не понятна одна конструкция / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]