7.7 Отчет по подчиненным справочникам

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем airjim, 22 июл 2008.

  1. TopicStarter Overlay
    airjim
    Offline

    airjim

    Регистрация:
    10 июл 2007
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте всем! Не получается сформировать отчет по подчиненным элементам справочника, которые в свою очередь тоже могут являтся владельцами для элементов этого же справочника. Запросом получается создать отчет только для 2х элементов: Владельца и подчиненного элемента!
    Заранее благодарю за помощь. Вот код:
    Код:
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Владелец = Справочник.Комплектация.Владелец;
    |Деталь = Справочник.Комплектация.Деталь;
    |Группировка Владелец без групп;
    |Группировка Деталь без групп;
    |Условие(Владелец = ВыбВладелец);
    |"//}}ЗАПРОС;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
    // Заполнение полей Владелец
    Таб.ВывестиСекцию("Владелец");
    Пока Запрос.Группировка(2) = 1 Цикл
    // Заполнение полей Деталь
    Таб.ВывестиСекцию("Деталь");
    КонецЦикла;
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
    КонецПроцедуры
    
    
    
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Лучше опиши структуру подчиненности твоих справочников, и какого вида хочешь получить отчет (а потом будем код разбирать)
  3. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Интересно, как такое можно сделать?
  4. bob
    Offline

    bob Опытный в 1С

    Регистрация:
    7 май 2008
    Сообщения:
    386
    Симпатии:
    0
    Баллы:
    26
    да, структуру подчиненности в студию!
  5. TopicStarter Overlay
    airjim
    Offline

    airjim

    Регистрация:
    10 июл 2007
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Справочник Номенклатура является владельцем для справочника Комплектация, в справочнике Номенклатура храняться Изделия и Детали. Например:
    Изделие: Насос (Изделие Спр.Номенклатура) ->
    -> Втулка(Деталь Хранится в Спр.Комплектация, выбирается из Номенкл., Владелец - Насос)
    -> Корпус (Владелец - Насос)
    -> Прокладка -> Болт (Владелец = Прокладка)
    ____________-> Шуруп (Владелец = Прокладка) -> и т.д.

    В отчет получается только вывести:
    Насос ->
    -> Втулка(Хранится в Спр.Комплектация, выбирается из номенкл.)
    -> Корпус
    -> Прокладка -> Дальше не выводиться отчет
  6. bob
    Offline

    bob Опытный в 1С

    Регистрация:
    7 май 2008
    Сообщения:
    386
    Симпатии:
    0
    Баллы:
    26
    получается что-то типа такого: выбираешь у насоса подчиненные элементы, потом находишь эти элементы в справочнике "номенклатура" и уже к ним находишь подчиненные элементы и так далееееее

    это если без использования запроса
  7. a3a3ello
    Offline

    a3a3ello

    Регистрация:
    16 апр 2008
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Ага. Товар состоит из деталей детали еще из детелей и так до листового железа , проволоки и проч.
    Я такую фигню тоже без запроса делал. Был набор процедур или функций. Типа "ПолучитьСписокДеталейЭтогоТовара()"- это как раз то что первый пост делает , "ПолучитьСписокДеталейДляСписка()" , "ПолучитьСписокМатериаловТовара()"
    Они друг друга вызывают по всякому. А так чтоб одним запросом. Это очень круто.
  8. TopicStarter Overlay
    airjim
    Offline

    airjim

    Регистрация:
    10 июл 2007
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Я переделал получилось вот:
    Код:
    Спр = СоздатьОбъект("Справочник.Комплектация");
    Ном = СоздатьОбъект("Справочник.Номенклатура");
    
    Спр.ИспользоватьВладельца(выб);
    
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Печ");
    Таб.ВывестиСекцию("Шапка");
    Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
    Спр.ВыбратьЭлементы(); 
    Таб.ВывестиСекцию("Строка");
    
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    
    Таб.ВывестиСекцию("Деталь"); 
    
    Деталь = Спр.Деталь;
    Ном.НайтиПоНаименованию(СокрЛП(Деталь),0,0);               
    НомТекЭл = Ном.ТекущийЭлемент();
    
    Спр.ИспользоватьВладельца(НомТекЭл);
    Спр.ВыбратьЭлементы();
    
    Спр.ПолучитьЭлемент();
    Таб.ВывестиСекцию("Подчин2");
    Сообщить(Спр.ИспользоватьВладельца(НомТекЭл)); 
    Спр.ИспользоватьВладельца(выб);
    
    КонецЦикла; 
    
    Получаю Изделие( Владельца)-> Подчиненную деталь -> следующую подчиненную деталь
    А дальше мне нужно вернуться в начало цикла продолжить выводить следующее изделие и подчиненные детали. Как это сделать? Ну или как проверить есть ли у элемента в подчинении детали?
  9. Ткачев
    Offline

    Ткачев

    Регистрация:
    21 июн 2008
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    А все таки, подскажите пж. как в запросе работать с подчиненными справочниками.
    Как мне вот это, засунуть в запрос ?
    Код:
    //ТипыЦен=Справочник.ТипыЦен
    //ЦеныПО=Справочник.ЦеныПО
    //Наимен=Номенклатура
    
    ТипыЦен.ВыбратьЭлементы();
    Пока ТипыЦен.ПолучитьЭлемент()=1 Цикл
    ЦеныПО.ИспользоватьВладельца(Наимен);
    ЦеныПО.ВыбратьЭлементы();
    Пока ЦеныПО.ПолучитьЭлемент()=1 Цикл
    Цена=0;
    Если ТипыЦен.ТекущийЭлемент()=ЦеныПо.ТипЦены Тогда
    Цена=ЦеныПО.Цена;Прервать;
    КонецЕсли;
    КонецЦикла;Таб.ПрисоединитьСекцию(Стр+"|Цена");
    КонецЦикла;
    
    
    ИСПОЛЬЗУЕМ ТЭГ
    Код:
    
    

Поделиться этой страницей