Получить тип реквизита из нескольких типов ссылок из табличной части ДокументСсылка.

1. user1674465 09.10.21 18:45 Сейчас в теме
Заранее извиняюсь, если вопрос некорректен, я пока только изучаю 1с.

Есть ДокументСсылка. В Документе есть ТабличнаяЧасть. У ТабличнойЧасти есть Реквизит. У Реквизита тип: ДокументСсылка.<Имя документа 1>, ДокументСсылка.<Имя документа 2>, ДокументСсылка.<Имя документа 3>.

Мне нужна функция, которая возвращала бы тип реквизита, в зависимости от того на какой документ ссылается реквизит.

Функция ПолучитьТипРеквизита(ДокументСсылка)

    //Волшебный код, который делает что мне надо.

    Возврат ТипРеквизита; //Возвращается строка следующего вида: "Документ.<Имя документа Х>" или "ДокументСсылка.<Имя документа Х>"

КонецФункции
Показать
По теме из базы знаний
Найденные решения
13. user1674465 11.10.21 10:51 Сейчас в теме
В общем сам нашёл решение, оставляю здесь.
БазовыеТипы = "ЧислоБулевоДатаСтрокаХранилищеЗначения";

Для каждого ТабличнаяЧасть из ДокументСсылка.Метаданные().ТабличныеЧасти цикл
    Таблица = ДокументСсылка[ТабличнаяЧасть.Имя];
    Для каждого Строка из Таблица Цикл
        Для каждого Реквизит из ТабличнаяЧасть.Реквизиты Цикл
             Если Найти(БазовыеТипы, Реквизит.Тип) = 0 <> Неопределено Тогда
                  РеквизитТип = Метаданные.НайтиПоТипу(ТипЗнч(Строка[Реквизит.Имя])).ПолноеИмя(); //Здесь я получаю, что мне надо	
	      КонецЕсли;
         КонецЦикла;
    КонецЦикла;
КонецЦикла;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
11. spacecraft 09.10.21 20:55 Сейчас в теме
(1)
Возврат "ДокументСсылка."+ДокументСсылка.Метаданные().Имя;
2. TokarevV 30 09.10.21 18:57 Сейчас в теме
ТипРеквизита = ТипЗнч(ДокументСсылка)
4. user1674465 09.10.21 19:07 Сейчас в теме
(2)
ТипЗнч(ДокументСсылка)

Таким образом я возвращаю строку ДокументСсылка.Метаданные().Синоним.
3. TokarevV 30 09.10.21 19:06 Сейчас в теме
ТипРеквизита = Тип("ДокументСсылка.РеализацияТоваров")
5. user1674465 09.10.21 19:09 Сейчас в теме
(3)
Тип("ДокументСсылка.РеализацияТоваров")


Таким образом тоже просто получаю синоним документа "РеализацияТоваров".
6. TokarevV 30 09.10.21 19:12 Сейчас в теме
Если в табличной части несколько документов, вы чем хотите заполнить переменную ТипРеквизита ? Массивом, ТаблицейЗначений? Или желаете "взять" только тип первого документа?
7. user1674465 09.10.21 19:18 Сейчас в теме
(6)
части несколько документов, вы чем хотите заполнить переменную ТипРеквизита ? М


Взять тот тип документа, которому принадлежит, значение Реквизита ТабличнойЧасти.
Получить массив или первый документ в нужном мне формате, я знаю как, но мне нужен "тот самый документ".
8. TokarevV 30 09.10.21 19:36 Сейчас в теме
Функция ПолучитьТипРеквизита(ДокументСсылка)
ТипРеквизита = Новый Массив;
   Для каждого Строка из ДокументСсылка.ТабличнаяЧасть Цикл
ТипРеквизита.Добавить(ТипЗнч(Строка.Документ));
КонецЦикла;

    Возврат ТипРеквизита; //Возвращается строка следующего вида: "Документ.<Имя документа Х>" или "ДокументСсылка.<Имя документа Х>"

КонецФункции
Показать
12. -AI- 09.10.21 21:07 Сейчас в теме
(8)
Функция ПолучитьТипРеквизита(ДокументСсылка)
ТипРеквизита = Новый Массив;
Для каждого Строка из ДокументСсылка.ТабличнаяЧасть Цикл
ТипРеквизита.Добавить(ТипЗнч(Строка.Документ));
КонецЦикла;

Возврат ТипРеквизита; //Возвращается строка следующего вида: "Документ." или "ДокументСсылка."

КонецФункции

сделай
Возврат ТипЗнч(ТипРеквизита)
, и сравни с
Возврат ТипЗнч("ДокументСсылка.")
9. provadyuga 99 09.10.21 20:26 Сейчас в теме
Таким образом я возвращаю строку ДокументСсылка.Метаданные().Синоним.

ТипЗнч(ДокументСсылка) возвращает не строку, а тип значения.
10. TokarevV 30 09.10.21 20:41 Сейчас в теме
(9) "Мне нужна функция, которая возвращала бы тип реквизита"
А вам то что надо?
13. user1674465 11.10.21 10:51 Сейчас в теме
В общем сам нашёл решение, оставляю здесь.
БазовыеТипы = "ЧислоБулевоДатаСтрокаХранилищеЗначения";

Для каждого ТабличнаяЧасть из ДокументСсылка.Метаданные().ТабличныеЧасти цикл
    Таблица = ДокументСсылка[ТабличнаяЧасть.Имя];
    Для каждого Строка из Таблица Цикл
        Для каждого Реквизит из ТабличнаяЧасть.Реквизиты Цикл
             Если Найти(БазовыеТипы, Реквизит.Тип) = 0 <> Неопределено Тогда
                  РеквизитТип = Метаданные.НайтиПоТипу(ТипЗнч(Строка[Реквизит.Имя])).ПолноеИмя(); //Здесь я получаю, что мне надо	
	      КонецЕсли;
         КонецЦикла;
    КонецЦикла;
КонецЦикла;
Показать
Оставьте свое сообщение

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