Можно как то в "вычисляемом поле" получить верхний уровень?
Мою экспортную функцию не хавает.........ОШИБКА - "Значение не является значением объектного типа (Родитель)"
В запросе у меня вроде ссылка, откуда и пихаю её в выражение вычисляемого поля.
Мою экспортную функцию не хавает.........ОШИБКА - "Значение не является значением объектного типа (Родитель)"
В запросе у меня вроде ссылка, откуда и пихаю её в выражение вычисляемого поля.
Функция ВерхнийРодитель(Ссылка) Экспорт //получаем верхнее подразделение
Возврат ?(Ссылка.Родитель.Пустая(), Ссылка, ВерхнийРодитель(Ссылка.Родитель));
КонецФункции
По теме из базы знаний
Найденные решения
(5) Ну так я и написал код для экспортной процедуры запускаемой из СКД.
Можно конечно в выражении СКД или просто в запросе написать что-то вроде:
ВЫБОР
КОГДА НЕ Ссылка.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель.Родитель.Родитель
КОГДА НЕ Ссылка.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель.Родитель
КОГДА НЕ Ссылка.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель
ИНАЧЕ Ссылка
КОНЕЦ
Но требует ограничения уровней и по скорости может быть не очень
Можно конечно в выражении СКД или просто в запросе написать что-то вроде:
ВЫБОР
КОГДА НЕ Ссылка.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель.Родитель.Родитель
КОГДА НЕ Ссылка.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель.Родитель
КОГДА НЕ Ссылка.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель
ИНАЧЕ Ссылка
КОНЕЦ
Но требует ограничения уровней и по скорости может быть не очень
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Сгруппировать подразделения верхнего уровня, в них вложения подразделений. Уровни просто везде разные.
Мой запрос СКД.
Мой запрос СКД.
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Период КАК ДействуетС,
ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Регистратор КАК Регистратор,
ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Показатель КАК Показатель,
ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Значение КАК Значение,
ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.ДействуетДо КАК ДействуетДо,
КадроваяИсторияСотрудниковСрезПоследних.Период КАК Период,
КадроваяИсторияСотрудниковСрезПоследних.Регистратор КАК КадровыйДокумент,
КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение,
КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
ИЗ
РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников КАК ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних
ПО (КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Сотрудник)
ГДЕ
(&ДатаОкончания <= ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.ДействуетДо
ИЛИ ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Период >= &ДатаНачала)
Показать
а если так?
Функция ВерхнийРодитель(Ссылка) Экспорт //получаем верхнее подразделение
Возврат ?(ЗначениеЗаполнено(Ссылка.Родитель), ВерхнийРодитель(Ссылка.Родитель), Ссылка);
КонецФункции
ну и в отладчике остановку по ошибке сделать и посмотреть что там в ссылке в момент ошибки
Функция ВерхнийРодитель(Ссылка) Экспорт //получаем верхнее подразделение
Возврат ?(ЗначениеЗаполнено(Ссылка.Родитель), ВерхнийРодитель(Ссылка.Родитель), Ссылка);
КонецФункции
ну и в отладчике остановку по ошибке сделать и посмотреть что там в ссылке в момент ошибки
Вероятно передается не ссылка. Смотрите в отладчике.
Но, вообще лучше не рекурсией, а запросом:
Но, вообще лучше не рекурсией, а запросом:
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Ссылка
|ИТОГИ ПО
| Ссылка ТОЛЬКО ИЕРАРХИЯ";
Результат = Запрос.Выполнить();
Если Выборка.Следующий() и НЕ Выборка.Ссылка.Пустая() Тогда
Возврат Выборка.Ссылка;
Иначе
Возврат Ссылка
КонецЕсли;
Показать
(5) Ну так я и написал код для экспортной процедуры запускаемой из СКД.
Можно конечно в выражении СКД или просто в запросе написать что-то вроде:
ВЫБОР
КОГДА НЕ Ссылка.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель.Родитель.Родитель
КОГДА НЕ Ссылка.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель.Родитель
КОГДА НЕ Ссылка.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель
ИНАЧЕ Ссылка
КОНЕЦ
Но требует ограничения уровней и по скорости может быть не очень
Можно конечно в выражении СКД или просто в запросе написать что-то вроде:
ВЫБОР
КОГДА НЕ Ссылка.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель.Родитель.Родитель
КОГДА НЕ Ссылка.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель.Родитель
КОГДА НЕ Ссылка.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА Ссылка.Родитель
ИНАЧЕ Ссылка
КОНЕЦ
Но требует ограничения уровней и по скорости может быть не очень
у меня такой код работает: соответственно:
МассивРодителей[0] - это родитель первого уровня.
Запрос = Новый Запрос(
"ВЫБРАТЬ Ссылка
| ИЗ Справочник.Номенклатура
|ГДЕ Ссылка = &Ссылка
|ИТОГИ ПО Ссылка ТОЛЬКО ИЕРАРХИЯ");
Запрос.УстановитьПараметр("Ссылка",Номенклатура);
МассивРодителей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
МассивРодителей[0] - это родитель первого уровня.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот