1С8. Как узнать является ли справочник подчиненным

1. svetlana2007 18.02.25 12:45 Сейчас в теме
Платформа 8.3.26.1498. Конфигурация не типовая, Хьюмен Систем для Беларуси, приложение обычное. Третий день бьюсь в попытках, как узнать является ли справочник подчиненным.

Задача такая: загружаю проводки из ЗИК. Для определения значения субконто - написала функцию получения справочника и поиска в нем нужного (переданного) значения.

Но. Справочник "Договора" подчинен "Контрагенты". Так вот при получении "Договора" как мне узнать, что он подчиненный и его Владелец "Контрагенты"?

Перепробовала все, что нашла в инете. И все - не работает.
Ниже код и не рабочие варианты. Заранее извиняюсь, если где-то там абсолютная ерунда. Даже ИИ подключала к проблеме. А он, чаще всего, пишет команды и функции, которых нет в языке.

// Получаем метаданные справочника по полному имени
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник." + НаименованиеСправочника);

// проверку, является ли этот объект справочником делаю до попадания сюда. Поэтому проверки здесь не привожу.


// теперь надо проверить не является ли найденный справочник подчиненным

//ПЕРЕПРОБОВАЛА ПО РЕЗУЛЬТАТАМ ПОИСКА В СЕТИ - и все это не работает:

Эти варианты - выдают ошибки вида: ""Поле объекта не обнаружено ..."
или "Метод объекта не обнаружен...."

1) Владелец = ОбъектМетаданных.Владелец;
2) Если ОбъектМетаданных.ЯвляетсяПодчиненным() Тогда
Сообщить("Справочник является подчиненным.");
Иначе
Сообщить("Справочник не является подчиненным.");
КонецЕсли;

3) РеквизитВладелец = ОбъектМетаданных.Реквизиты.НайтиПоНаименованию("Владелец"); Метод объекта не обнаружен (НайтиПоНаименованию).

4) Проверяем наличие реквизита "Владелец"
РеквизитВладелец = НеОпределено;
Для Каждого Рекvizит Из ОбъектМетаданных.Реквизиты Цикл
Если Рекvizит.Наименование = "Владелец" Тогда
РеквизитВладелец = Рекvizит;
Прервать; // Выходим из цикла, так как нашли нужный реквизит
КонецЕсли;
КонецЦикла;

Если РеквизитВладелец = Неопределено Тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' не является подчиненным.");
Иначе
// Для подчиненного справочника получаем владельца
Владелец = РеквизитВладелец.ТипЗначения; // Тип значения реквизита "Владелец" указывает на основной справочник

Если Владелец <> Неопределено Тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' является подчиненным. Владелец: " + Владелец.Имя);
Иначе
Сообщить("Ошибка: владелец не определен.");
КонецЕсли;
КонецЕсли;


5) Если ТипЗнч(ОбъектМетаданных.Владелец) <> Неопределено тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' является подчиненным");
конецЕсли;

6) в этом варианте - ошибок не выдает. Но и реквизит "Владелец" - не
находит, даже у подчиненного справочника "Договора".
РеквизитВладелец = ОбъектМетаданных.Реквизиты.Найти("Владелец");

Если РеквизитВладелец = Неопределено Тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' не является подчиненным.");
Иначе
Владелец = РеквизитВладелец.ТипЗначения;
Сообщить("Справочник '" + НаименованиеСправочника + "' является подчиненным. Владелец: " + Владелец.Наименование);
КонецЕсли;
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
11. Sashares 33 18.02.25 13:24 Сейчас в теме
(1)
Справочник "Договора" подчинен "Контрагенты". Так вот при получении "Договора" как мне узнать, что он подчиненный и его Владелец "Контрагенты"


Ну если известно, что это справочник Договора, а в конфигураторе у него указан владелец Контрагенты, то какую информацию еще надо? Зачем что-то еще искать?
17. user2107191 18.02.25 13:30 Сейчас в теме
(11) Видимо, пишут универсальную абстракцию. Не зная и не понимая базы.
2. user2107191 18.02.25 12:54 Сейчас в теме
Начни с отладчика.
А потом поищи в СП, что же такое ОбъектМетаданных:Справочник, и какие у него есть свойства. И сравни со своими экзерсисами от ИИ.
6. svetlana2007 18.02.25 13:20 Сейчас в теме
(2) три рабочих дня в Отладчике и максимальный поиск по инету. Если бы я нашла решение - я бы сюда не писала.
9. user2107191 18.02.25 13:22 Сейчас в теме
(6)
максимальный поиск по инету.
Зачем? Если есть СП?
И не верь Калимуллину.
19. user2107191 18.02.25 13:34 Сейчас в теме
(6)
три рабочих дня в Отладчике
И что в Отладчике показывает ОбъектМетаданных? Есть у него свойство Владелец? А какие есть?
Ты че в отладчике делала-то вообще? Бухала что ли там?
3. ZOMI 143 18.02.25 12:58 Сейчас в теме
ОбъектМетаданных.Справочник.Владельцы (тут будет коллекция владельцев)
4. user2107191 18.02.25 13:08 Сейчас в теме
12. svetlana2007 18.02.25 13:24 Сейчас в теме
(3)
ОбъектМетаданных.Справочник.Владельцы
- Поле объекта не обнаружено (Справочник)
Прикрепленные файлы:
13. user2107191 18.02.25 13:24 Сейчас в теме
(12) ХАХАХААХ
Зачем программисту голова, если есть копипаст? Правда?
15. Sashares 33 18.02.25 13:26 Сейчас в теме
(13) Видимо обсуждать что-то конструктивное в этой теме смысла нет =)
16. user2107191 18.02.25 13:27 Сейчас в теме
(15) Ага, никогда такого не было и вот опять!
18. svetlana2007 18.02.25 13:32 Сейчас в теме
(13) форумы программистов 1С типично характеризуются троллингом. Из всей беседы - один, два человека ответят по существую. Остальные - просто поиздеваются.

Строка кода, которую вы привели - не работает. Почему? можете растолковать человеку, который 18 лет профиллируется на 1С 7.7. ЗИК?
20. user2107191 18.02.25 13:35 Сейчас в теме
(18) Потому что это строка из 8.х (не ЗИК)
14. ZOMI 143 18.02.25 13:25 Сейчас в теме
5. ZOMI 143 18.02.25 13:19 Сейчас в теме
(4) Что неверно?

ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник.ДоговорыКонтрагентов");


Для каждого Владелец ИЗ ОбъектМетаданных.Владельцы Цикл

Сообщить(Владелец.Имя);

КонецЦикла;
8. user2107191 18.02.25 13:22 Сейчас в теме
(5)
Что неверно?
Сам сравни:
ОбъектМетаданных.Справочник.Владельцы (тут будет коллекция владельцев)

Для каждого Владелец ИЗ ОбъектМетаданных.Владельцы Цикл
10. ZOMI 143 18.02.25 13:23 Сейчас в теме
(8) да - здесь лучше давать пример кода ) ну я дал рабочий
21. svetlana2007 18.02.25 13:37 Сейчас в теме
(8) Спасибо за помощь.

После небольшой корректировки - отработала конструкциия:

Владельцы = ОбъектМетаданных.Владельцы;
Для каждого Владелец ИЗ ОбъектМетаданных.Владельцы Цикл

Сообщить("Владелец = "+ Владелец.Имя);

КонецЦикла;
7. ZOMI 143 18.02.25 13:21 Сейчас в теме
+(5) вернет 'Контрагенты"
svetlana2007; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот