1С8. Как узнать является ли справочник подчиненным
Платформа 8.3.26.1498. Конфигурация не типовая, Хьюмен Систем для Беларуси, приложение обычное. Третий день бьюсь в попытках, как узнать является ли справочник подчиненным.
Задача такая: загружаю проводки из ЗИК. Для определения значения субконто - написала функцию получения справочника и поиска в нем нужного (переданного) значения.
Но. Справочник "Договора" подчинен "Контрагенты". Так вот при получении "Договора" как мне узнать, что он подчиненный и его Владелец "Контрагенты"?
Перепробовала все, что нашла в инете. И все - не работает.
Ниже код и не рабочие варианты. Заранее извиняюсь, если где-то там абсолютная ерунда. Даже ИИ подключала к проблеме. А он, чаще всего, пишет команды и функции, которых нет в языке.
// Получаем метаданные справочника по полному имени
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник." + НаименованиеСправочника);
// проверку, является ли этот объект справочником делаю до попадания сюда. Поэтому проверки здесь не привожу.
// теперь надо проверить не является ли найденный справочник подчиненным
//ПЕРЕПРОБОВАЛА ПО РЕЗУЛЬТАТАМ ПОИСКА В СЕТИ - и все это не работает:
Эти варианты - выдают ошибки вида: ""Поле объекта не обнаружено ..."
или "Метод объекта не обнаружен...."
1) Владелец = ОбъектМетаданных.Владелец;
2) Если ОбъектМетаданных.ЯвляетсяПодчиненным() Тогда
Сообщить("Справочник является подчиненным.");
Иначе
Сообщить("Справочник не является подчиненным.");
КонецЕсли;
3) РеквизитВладелец = ОбъектМетаданных.Реквизиты.НайтиПоНаименованию("Владелец"); Метод объекта не обнаружен (НайтиПоНаименованию).
4) Проверяем наличие реквизита "Владелец"
РеквизитВладелец = НеОпределено;
Для Каждого Рекvizит Из ОбъектМетаданных.Реквизиты Цикл
Если Рекvizит.Наименование = "Владелец" Тогда
РеквизитВладелец = Рекvizит;
Прервать; // Выходим из цикла, так как нашли нужный реквизит
КонецЕсли;
КонецЦикла;
Если РеквизитВладелец = Неопределено Тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' не является подчиненным.");
Иначе
// Для подчиненного справочника получаем владельца
Владелец = РеквизитВладелец.ТипЗначения; // Тип значения реквизита "Владелец" указывает на основной справочник
Если Владелец <> Неопределено Тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' является подчиненным. Владелец: " + Владелец.Имя);
Иначе
Сообщить("Ошибка: владелец не определен.");
КонецЕсли;
КонецЕсли;
5) Если ТипЗнч(ОбъектМетаданных.Владелец) <> Неопределено тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' является подчиненным");
конецЕсли;
6) в этом варианте - ошибок не выдает. Но и реквизит "Владелец" - не
находит, даже у подчиненного справочника "Договора".
РеквизитВладелец = ОбъектМетаданных.Реквизиты.Найти("Владелец");
Если РеквизитВладелец = Неопределено Тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' не является подчиненным.");
Иначе
Владелец = РеквизитВладелец.ТипЗначения;
Сообщить("Справочник '" + НаименованиеСправочника + "' является подчиненным. Владелец: " + Владелец.Наименование);
КонецЕсли;
Задача такая: загружаю проводки из ЗИК. Для определения значения субконто - написала функцию получения справочника и поиска в нем нужного (переданного) значения.
Но. Справочник "Договора" подчинен "Контрагенты". Так вот при получении "Договора" как мне узнать, что он подчиненный и его Владелец "Контрагенты"?
Перепробовала все, что нашла в инете. И все - не работает.
Ниже код и не рабочие варианты. Заранее извиняюсь, если где-то там абсолютная ерунда. Даже ИИ подключала к проблеме. А он, чаще всего, пишет команды и функции, которых нет в языке.
// Получаем метаданные справочника по полному имени
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник." + НаименованиеСправочника);
// проверку, является ли этот объект справочником делаю до попадания сюда. Поэтому проверки здесь не привожу.
// теперь надо проверить не является ли найденный справочник подчиненным
//ПЕРЕПРОБОВАЛА ПО РЕЗУЛЬТАТАМ ПОИСКА В СЕТИ - и все это не работает:
Эти варианты - выдают ошибки вида: ""Поле объекта не обнаружено ..."
или "Метод объекта не обнаружен...."
1) Владелец = ОбъектМетаданных.Владелец;
2) Если ОбъектМетаданных.ЯвляетсяПодчиненным() Тогда
Сообщить("Справочник является подчиненным.");
Иначе
Сообщить("Справочник не является подчиненным.");
КонецЕсли;
3) РеквизитВладелец = ОбъектМетаданных.Реквизиты.НайтиПоНаименованию("Владелец"); Метод объекта не обнаружен (НайтиПоНаименованию).
4) Проверяем наличие реквизита "Владелец"
РеквизитВладелец = НеОпределено;
Для Каждого Рекvizит Из ОбъектМетаданных.Реквизиты Цикл
Если Рекvizит.Наименование = "Владелец" Тогда
РеквизитВладелец = Рекvizит;
Прервать; // Выходим из цикла, так как нашли нужный реквизит
КонецЕсли;
КонецЦикла;
Если РеквизитВладелец = Неопределено Тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' не является подчиненным.");
Иначе
// Для подчиненного справочника получаем владельца
Владелец = РеквизитВладелец.ТипЗначения; // Тип значения реквизита "Владелец" указывает на основной справочник
Если Владелец <> Неопределено Тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' является подчиненным. Владелец: " + Владелец.Имя);
Иначе
Сообщить("Ошибка: владелец не определен.");
КонецЕсли;
КонецЕсли;
5) Если ТипЗнч(ОбъектМетаданных.Владелец) <> Неопределено тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' является подчиненным");
конецЕсли;
6) в этом варианте - ошибок не выдает. Но и реквизит "Владелец" - не
находит, даже у подчиненного справочника "Договора".
РеквизитВладелец = ОбъектМетаданных.Реквизиты.Найти("Владелец");
Если РеквизитВладелец = Неопределено Тогда
Сообщить("Справочник '" + НаименованиеСправочника + "' не является подчиненным.");
Иначе
Владелец = РеквизитВладелец.ТипЗначения;
Сообщить("Справочник '" + НаименованиеСправочника + "' является подчиненным. Владелец: " + Владелец.Наименование);
КонецЕсли;
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Ну если известно, что это справочник Договора, а в конфигураторе у него указан владелец Контрагенты, то какую информацию еще надо? Зачем что-то еще искать?
Справочник "Договора" подчинен "Контрагенты". Так вот при получении "Договора" как мне узнать, что он подчиненный и его Владелец "Контрагенты"
Ну если известно, что это справочник Договора, а в конфигураторе у него указан владелец Контрагенты, то какую информацию еще надо? Зачем что-то еще искать?
(13) форумы программистов 1С типично характеризуются троллингом. Из всей беседы - один, два человека ответят по существую. Остальные - просто поиздеваются.
Строка кода, которую вы привели - не работает. Почему? можете растолковать человеку, который 18 лет профиллируется на 1С 7.7. ЗИК?
Строка кода, которую вы привели - не работает. Почему? можете растолковать человеку, который 18 лет профиллируется на 1С 7.7. ЗИК?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот