Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 06:05

Маленький вопросик

Автор djkeysi, 10 ноя 2016, 12:13

0 Пользователей и 1 гость просматривают эту тему.

djkeysi

Подскажите есть такой вот код :
Функция НайтиТретийУровеньВложенностиНоменклатуры(Номенклатура) Экспорт

Уровень3 = Номенклатура.Родитель;
Уровень2 = Уровень3.Родитель;
Уровень1 = Уровень2.Родитель;

Если Уровень1 <> Справочники.Номенклатура.ПустаяСсылка() Тогда

Пока Уровень1.Родитель <> Справочники.Номенклатура.ПустаяСсылка() Цикл
Уровень3 = Уровень3.Родитель;
Уровень2 = Уровень2.Родитель;
Уровень1 = Уровень1.Родитель;
КонецЦикла;

Возврат Строка(Уровень3);
Иначе
Возврат "";
КонецЕсли;

КонецФункции // НайтиТретийУровеньВложенностиНоменклатуры()

Взят отсюда:
http://odinesnik.su/opredelit_roditelej_elementa_ierarhicheskogo_spravochnika/#respond
Проверил работает и выдает нужное значение.
Не могу его по правильному вызвать в модуле объекта документа:
вызываю вот так НайтиТретийУровеньВложенностиНоменклатуры(Справочники.Номенклатура) - пишет ошибку, поле обеъка не обнаружено родитель, помогите(

MuI_I_Ika

Цитата: djkeysi от 10 ноя 2016, 12:13НайтиТретийУровеньВложенностиНоменклатуры(Справочники.Номенклатура)

Вы передаете в функцию менеджер объекта, а нужно передавать конкретную ссылку на элемент справочника.

djkeysi

Цитата: MuI_I_Ika от 10 ноя 2016, 12:23
Цитата: djkeysi от 10 ноя 2016, 12:13НайтиТретийУровеньВложенностиНоменклатуры(Справочники.Номенклатура)

Вы передаете в функцию менеджер объекта, а нужно передавать конкретную ссылку на элемент справочника.

вызываю так Движение.РабочееМесто = НайтиТретийУровеньВложенностиНоменклатуры(Справочники.Номенклатура.ПолучитьСсылку().Родитель); и нужно получить значение которое возвращает функция
теперь выдает такую ошибку ссылаясь на Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ЗаказПокупателя.МодульОбъекта(1453)}: Поле объекта не обнаружено (Родитель)
   Уровень3 = Номенклатура.Родитель;

MuI_I_Ika

Зачем вам определять 3-ий уровень вложенности у пустой ссылки?

djkeysi

Цитата: MuI_I_Ika от 10 ноя 2016, 12:47
Зачем вам определять 3-ий уровень вложенности у пустой ссылки?
Когда проходу отладчиком выдает название группы в итоге, а при вызове понять нечего немогу(мож конец рабочего дня сказывается)
скажите как по правильному вызвать к примеру данную функцию в которрой лежит значение?

Kironten

Цитата: djkeysi от 10 ноя 2016, 12:55
скажите как по правильному вызвать к примеру данную функцию в которрой лежит значение?
Вызываете вы правильно, но вот в качестве параметра передаете хрень.
Эта конструкция
Справочники.Номенклатура.ПолучитьСсылку()
возвращает пустую ссылку.
Вот у вас и спрашивают, зачем вы получаете третий уровень вложенности у пустой ссылки.
Грубо говоря, вы хотите попросить систему достать третью матрешку, и передаете ей матрешку, а на деле у вас получается, что вы просите достать матрешку, а передаете пустую коробку в которой продаются матрешки.

djkeysi

Цитата: Kironten от 10 ноя 2016, 13:29
Цитата: djkeysi от 10 ноя 2016, 12:55
скажите как по правильному вызвать к примеру данную функцию в которрой лежит значение?
Вызываете вы правильно, но вот в качестве параметра передаете хрень.
Эта конструкция
Справочники.Номенклатура.ПолучитьСсылку()
возвращает пустую ссылку.
Вот у вас и спрашивают, зачем вы получаете третий уровень вложенности у пустой ссылки.
Грубо говоря, вы хотите попросить систему достать третью матрешку, и передаете ей матрешку, а на деле у вас получается, что вы просите достать матрешку, а передаете пустую коробку в которой продаются матрешки.


Угу вообще муть получается, вообще запутался, Подскажите как сделать-
Есть у нас справочник номенклатура в ней папки. 1 уровень - папка Операции в ней еще группа папок к примеру папка рамка в нем реквизит, как мне по этому реквизиту получить имя папки рамка?

Kironten

Где реквизит?
В самой группе "Рамка"?
Если да, тогда проще запрос сделать с условием к примеру
...
ИЗ
Справочник.Номенклатура КАК Спр
ГДЕ Спр.ЭтоГруппа И Спр.<ИмяРеквизита> = &ЗначениеРеквизита

А вообще, что вы подразумеваете под "реквизит"?
Есть подозрение, что вы сейчас путаете понятия "реквизит", и "элемент справочника".
Дайте скрин лучше.

alex0402

Укровень = 3;
Пока ЗначениеЗаполнено(мНоменклатура) И Уровень > 0 Цикл
    мНоменклатура = мНоменклатура.Родитель;
    Уровень = Уровень - 1;
КонецЦикла;
Сообщить(мНоменклатура.Наименование);
Спасибо за Сказать спасибо

djkeysi

Цитата: alex0402 от 10 ноя 2016, 17:33
Укровень = 3;
Пока ЗначениеЗаполнено(мНоменклатура) И Уровень > 0 Цикл
    мНоменклатура = мНоменклатура.Родитель;
    Уровень = Уровень - 1;
КонецЦикла;
Сообщить(мНоменклатура.Наименование);


ну как бы не реквизит в папке рамка, а элемент например рамка 2 мм и рамка 3мм и т.д.
Добавлено: 10 ноя 2016, 18:06


Цитата: djkeysi от 10 ноя 2016, 17:53
Цитата: alex0402 от 10 ноя 2016, 17:33
Укровень = 3;
Пока ЗначениеЗаполнено(мНоменклатура) И Уровень > 0 Цикл
    мНоменклатура = мНоменклатура.Родитель;
    Уровень = Уровень - 1;
КонецЦикла;
Сообщить(мНоменклатура.Наименование);

Попробывал выдает пустую строку в функции ВозратПоСпецификации(Неопределено) нужное мне значение содержится. Что не так пишу?
Уровень = 3;
Пока ЗначениеЗаполнено(ВозратПоСпецификации(Неопределено)) И Уровень > 0 Цикл
   мНоменклатура = Справочники.Номенклатура.ПолучитьСсылку().Родитель;
    Уровень = Уровень - 1;
КонецЦикла;
Сообщить(мНоменклатура.Наименование);

Теги:

Похожие темы (1)

Рейтинг@Mail.ru

Поиск