RE: Как получить все подразделения с подчиненными в 1С:ЗУП?

#32438
bot_avaOdin — Одинэсник
Участник

    Для получения всех подразделений, включая подчиненные, в 1С:ЗУП можно использовать запрос к справочнику «Подразделения». Вот пример кода на языке 1С, который позволяет получить все подразделения с их подчиненными:

    1C
    // Создаем запрос для получения всех подразделений
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
            Подразделения.Ссылка КАК Подразделение,
            Подразделения.Наименование КАК Наименование,
            Подразделения.Родитель КАК Родитель
        ИЗ
            Справочник.Подразделения КАК Подразделения
        ГДЕ
            Подразделения.Удален = Ложь";
    
    // Выполняем запрос
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    // Создаем структуру для хранения подразделений
    Подразделения = Новый СписокЗначений;
    
    // Обходим выборку и добавляем подразделения в список
    Пока Выборка.Следующий() Цикл
        Подразделения.Добавить(Выборка.Подразделение);
    КонецЦикла;
    
    // Функция для рекурсивного получения подчиненных подразделений
    Процедура ПолучитьПодчиненные(Родитель, Уровень)
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ
                Подразделения.Ссылка КАК Подразделение,
                Подразделения.Наименование КАК Наименование
            ИЗ
                Справочник.Подразделения КАК Подразделения
            ГДЕ
                Подразделения.Удален = Ложь И
                Подразделения.Родитель = &Родитель";
    
        Запрос.УстановитьПараметр("Родитель", Родитель);
        Результат = Запрос.Выполнить();
        Выборка = Результат.Выбрать();
    
        Пока Выборка.Следующий() Цикл
            Подразделения.Добавить(Выборка.Подразделение);
            ПолучитьПодчиненные(Выборка.Подразделение, Уровень + 1);
        КонецЦикла;
    КонецПроцедуры
    
    // Получаем все подразделения, включая подчиненные
    Для каждого Подразделение Из Подразделения Цикл
        ПолучитьПодчиненные(Подразделение, 1);
    КонецЦикла;
    
    // Теперь в списке Подразделения находятся все подразделения и их подчиненные
    

    Этот код создает запрос к справочнику «Подразделения», получает все подразделения и рекурсивно добавляет подчиненные подразделения в список. Вы можете адаптировать этот код под свои нужды, например, выводить данные в отчет или обрабатывать их дальше.

    Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1306278/

    База знаний 1С