1. nevro 13.06.12 15:14 Сейчас в теме

Запутался в менеджерах и терминологии 1с

Ветка "Справочники".
Справочник "Номенклатура". ("лист ветки")
Записи в справочнике "Номенклатура".

Менеджеры существуют у веток, "листьев", каждой записи (хотя странно)?
Ответы
Избранное Подписка Сортировка: Древо
7. AlexO 128 15.06.12 12:09 Сейчас в теме
(1) nevro,
Менеджеры существуют у веток, "листьев", каждой записи (хотя странно)?

нет, менеджеры существуют только у "объектов". У справочника нет ни "листьев", ни "веток", ни "записей" (записи - это в регистрах), а есть только элементы.
Вы пытаетесь с понятиями настоящего ООП подойти к "объектам" 1С: "ага, если есть объект СправочникиМенеджер - значит, он автоматически содержит объекты "Справочник" (пусть и "СправочникМенеджер" - может, 1с его просто так обозвала?!), СправочникСсылка (запись справочника - т.е. элемент справочника), и "СправочникВыборка"; если объект Регистр - автоматически содержит объект "Запись" и т.д.
Тут, конечно, можно поговорить об так называемом "разъименовании" объектов (получении данных объекта по ссылке через точку),
СправочникСсылкаНаЭлемент = Справочники[ИмяСправочника].НайтиПоНаименованию(ИмяЭлемента)

но это именно и есть "получение данных объекта по ссылке": формирование запроса на получение данных и соединение нескольких таблиц для вывода искомого. Откуда и тормоза в запросах (и не только - в частности, при использовании в тех же Выборках) при разъименовании, и категорический запрет на использование в запросах "двойного разъименования" (Объект.Свойство<содержащее СсылкуНаДругойОбъект>.СвойствоДругогоОбъекта) - а только явное соединение таблиц через СОЕДИНЕНИЕ...
А на самом деле в 1С нет настоящих "объектов" ООП (с чем я и пытаюсь бороться постоянно - чтобы не путали и не называли одним и тем же словом совершенно разное, или, хотя бы, понимали, что объекты в ООП и в 1С - это не одно и то же, а лишь названо одним термином; а для 1С, видимо, выгоднее, чтобы путались, и думали: "объекты" же есть, - значит - ООП!). В 1С, собственно, и введено внутренее понятие КоллекцияЗначений - а это не есть аналог контейнера объектов из ООП (который и сам определяет поведение входящих объектов, и дает доступ напрямую к ним - к их свойствам, методам, данным, событиям и т.д.), а набор ссылок на другие объекты, и из коллекции, если не получен "вложенный" элемент-объект (например, через метод НабораЗаписей "НаборЗаписей.Прочитать()" ), нельзя напрямую получить свойства и методы элементов коллекции, а только - получить "объекты" коллекции, и уже обходом или обращением к элементу коллекции - работать со свойствами и методами "вложенных" объектов. Объект РегистрСведений не содержит объект РегистрСведенийНаборЗаписей, а НаборЗаписей не содержит объекты РегистрСведенийЗапись. Для работы с каждым вложенным уровнем так называемых "объектов" - нужно получать объекты этого нового уровня вложенности.
Собственно, вся канитель "не могу получить данные объекта там-то", "не могу получить доступ к процедуре тут-то", "не видна переменная экспортная такая-то" и прочие невообразимые и множественные ограничения платформы - именно из-за наборов не связанных напрямую друг с другом "объектов", которых нужно каждый раз "получать", извлекать данные, и которым нужно каждый раз указывать - что мы от них хотим.
Возратимся к МенеджеруСправочников.
МенеджерСправочников ничего не делает, кроме как дает доступ к МенеджеруСправочника, который управляет объектом Справочник (но это не объект "СправочникОбъект"!).
А СправочникОбъект - это отдельный объект, не упомянутый выше объект Справочника целиком - как мы можем подумать, прочитав про "объект" (тот, выше упомянутый, просто предоставляет доступ к объекту конфигурации Справочник<такой-то> (т.е., можно сказать, к "описанию типа" справочника в конфигурации) - и здесь мы можем, например, создать Элемент справочника или группу, а вот СправочникОбъект - возвращает нам непосредственно конкретный созданый объект Справочник<такой-то> для работы с ним: удалить элемент, редактировать, прочитать свойства, обработать события), а объект Справочник (МенеджеруСправочника) является лишь "частью" общего формального понятия "Объект" (только лишь понятия, а не реализации такового в 1С!), если так можно сказать, оформленная в виде отдельного "объектика", и уже некоторые из них - собраны в "коллеции".
Надеюсь, что за "объектики" и как они "часть целого понятия" - я объяснил доступно: например, создаем новый элемент справочника в его "формальном" описании - в СправочникМенеджер, а вот работаем с конкретными элементами "как с настоящим объектом" - увы, уже в СправочникОбъект.
Есть еще и СправочникСсылка - еще один "объект", хоть и предоставляющий (как бы "содержащий") ссылку на конкретный объект СправочникОбъект, но сам являющийся отдельным и "независимым" объектом конфигурации со своими свойствами, методами и конструктором.
2. Dmitr033 110 13.06.12 15:28 Сейчас в теме
Есть Менеджер справочникОВ - дает доступ к конкретному справочнику, то есть к:
менеджеру справочникА - он дает возможность работы уже с элементами справочника.
3. nevro 13.06.12 15:56 Сейчас в теме
>>менеджеру справочникА - он дает возможность работы уже с элементами справочника.
А как же методы объекта (в модуле объекта)? У методов менеджера каких-то возможностей больше?
4. Dmitr033 110 13.06.12 17:15 Сейчас в теме
(3) nevro, Я не понимаю вопроса.
Менеджер справочника дает возможность работать с элементами справочника:
Номенклатура = Справочники.Номенклатура;
НайденнаяСсылка = Номенклатура.НайтиПоКоду(СтрокаКода);

В первой строке с помощью менеджера справочников получаем ссылку на менеджер справочника Номенклатура.
Во второй строке с помощью полученного менеджера справочника получаем ссылку на элемент справочника с кодом СтрокаКода. Найденная ссылка имеет тип СправочникСсылка.Номенклатура.
Кроме того для справочников еще есть Справочник Объект, для изменения реквизитов элемента.
А еще есть Справочник выборка - для организации перебора элементов, и Справочник Список - для вывода элементов на форму.
5. nevro 15.06.12 11:55 Сейчас в теме
В справке такая схема: СправочникВыборка.<Имя справочника>. Но в коде примера такого нет:
...
    ВыборкаСправочника = Справочники[ИдСправочника].Выбрать(,,СтруктураДляОтбора);
...

"Объект этого типа возвращается методами Выбрать и ВыбратьИерархически у объекта типа СправочникМенеджер.<Имя справочника>"
Не могу понять смысл: со стороны выглядит, будто Выбрать() - метод менеджера справочника "ИдСправочника". Почему же метод тогда описан, как часть типа СправочникВыборка?
6. AlexO 128 15.06.12 12:00 Сейчас в теме
(5) nevro,
Почему же метод тогда описан, как часть типа СправочникВыборка?

а он и есть метод менеджера справочника. А возвращает - уже другой объект СправочникВыборка.
1с сама себе придумала эту свалку с "объектами", и теперь постепенно погребается под ней.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Красноярск
зарплата от 50 000 руб.
По совместительству

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Технический лидер, архитектор 1С, руководитель проектов
Санкт-Петербург
зарплата от 150 000 руб.
Полный день

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Специалист техподдержки 1С
Москва
зарплата от 80 000 руб. до 120 000 руб.
Полный день