8.х Вывод на печать таблицы из подчинённого справочника

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Zablkon, 2 янв 2014.

  1. TopicStarter Overlay
    Zablkon
    Offline

    Zablkon

    Регистрация:
    2 янв 2014
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    Из справочника Заказы нужно вывести на печать реквизиты справочника Приборы, который является подчинённым первому. Проблема в том что у последнего есть таблица, которую я не могу распечатать
    http://yadi.sk/d/iIE4ZbraFKGJp
    http://yadi.sk/d/lXPYMZV2FKGKm
    Код:
    Процедура Печать(ТабДок, Ссылка) Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
    Макет = Справочники.Заказы.ПолучитьМакет("Печать");
    НСтр = 0;
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   Заказы.Код,
    | Заказы.Дата,
    | Заказы.Владелец
    |  
    |ИЗ
    | Справочник.Заказы КАК Заказы
    |ГДЕ
    | Заказы.Ссылка В (&Ссылка)";
    запросПриборы = Новый Запрос;
    запросПриборы.Текст =
    "ВЫБРАТЬ
    | Приборы.Наименование,
    | Приборы.Номер,
    | Приборы.Паспорт,
    | Приборы.Узел,
    | Приборы.Преобразователи.(
    |  Ссылка,
    |  НомерСтроки,
    |  Номер
    | )
    |ИЗ
    | Справочник.Приборы КАК Приборы
    |ГДЕ
    | Приборы.Владелец В(&Владелец)" ;
    
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    ЗапросПриборы.Параметры.Вставить("Владелец", Ссылка);
    
    Выборка = Запрос.Выполнить().Выбрать();
    ВыборкаПриборы = ЗапросПриборы.Выполнить().Выбрать();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Таб = макет.ПолучитьОбласть("Таб");
    Тело = Макет.ПолучитьОбласть("Тело");
    Подписи = макет.ПолучитьОбласть("Подписи");
    ТабДок.Очистить();
    
    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
    Если ВставлятьРазделительСтраниц Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    ОбластьЗаголовок.Параметры.Заполнить(Выборка);
    ТабДок.Вывести(ОбластьЗаголовок);
    Шапка.Параметры.Заполнить(Выборка);
    ТабДок.Вывести(Шапка, Выборка.Уровень());
    
    КонецЦикла;
    ТабДок.Вывести(Таб);
    Пока ВыборкаПриборы.Следующий() Цикл
    Если ВставлятьРазделительСтраниц Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    НСтр = НСтр + 1;
    Тело.Параметры["НСтр"] = НСтр;
    Тело.Параметры.Заполнить(ВыборкаПриборы);
    ТабДок.Вывести(Тело, ВыборкаПриборы.Уровень());
    Если ВыборкаПриборы["Узел"] = истина  
    тогда
    // Как дальше не знаю....
    
    Перебирать таблицу Преобразователи никак не получается...
    Может запрос нужно какой-то другой сделать для этой таблицы отдельно?
  2. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Код:
    ВЫБРАТЬ
    | Приборы.Наименование,
    | Приборы.Номер,
    | Приборы.Паспорт,
    | Приборы.Узел,
    | Преобразователи.Ссылка,
    |  Преобразователи.НомерСтроки,
    |  Преобразователи.Номер
    |ИЗ
    | Справочник.Приборы КАК Приборы
    |ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Приборы.Преобразователи КАК Преобразователи
    |ПО Приборы.Ссылка = Преобразователи.Ссылка    
    |ГДЕ
    | Приборы.Владелец В(&Владелец)
  3. TopicStarter Overlay
    Zablkon
    Offline

    Zablkon

    Регистрация:
    2 янв 2014
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    Такой именно выдавал все строки с одинаковыми реквизитами....
    Я немного поиграл в конструкторе с вашим запросом и получилось это:
    Код:
    Запрос2.Текст =
    "ВЫБРАТЬ
    | ПриборыПреобразователи.Номер КАК Номер,
    | ПриборыПреобразователи.Наименование,
    | ПриборыПреобразователи.Паспорт
    |ИЗ
    | Справочник.Приборы.Преобразователи КАК ПриборыПреобразователи
    |  ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Приборы КАК Приборы
    |  ПО ПриборыПреобразователи.Ссылка = Приборы.Ссылка
    |ГДЕ
    | Приборы.Владелец В(&Владелец)" ;
    
    так вышло нормально (сделал 2 запроса), был лишь нюанс... В строки Наименование и Паспорт забивались данные от прошлого запроса. Я просто в таблицу Преобразователи добавил такие же реквизиты.
    Спасибо за ответ.
  4. afinogen
    Offline

    afinogen Опытный в 1С

    Регистрация:
    28 фев 2011
    Сообщения:
    160
    Симпатии:
    0
    Баллы:
    26
    Левые и внутренние соединения тут не нужны
    Код:
    ВЫБРАТЬ
    | Преобразователи.ссылка.Наименование,
    | Преобразователи.ссылка.Номер,
    | Преобразователи.ссылка.Паспорт,
    | Преобразователи.ссылка.Узел,
    | Преобразователи.Ссылка,
    | Преобразователи.НомерСтроки,
    | Преобразователи.Номер
    |ИЗ
    | Справочник.Приборы.Преобразователи КАК Преобразователи
    |ГДЕ
    | Преобразователи.Ссылка.Владелец В (&Владелец)
    |ИТОГИ
    | КОЛИЧЕСТВО(Преобразователи.ссылка.Номер)
    |ПО
    |Преобразователи.Ссылка
    
    Далее обходте результат запроса по группировкам и все
  5. TopicStarter Overlay
    Zablkon
    Offline

    Zablkon

    Регистрация:
    2 янв 2014
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    Код:
    	ЗапросП2=Новый Запрос;
    ЗапросП2.Текст =
    "ВЫБРАТЬ
    | Преобразователи.ссылка.Наименование,
    | Преобразователи.ссылка.Номер,
    | Преобразователи.ссылка.Паспорт,
    | Преобразователи.ссылка.Узел,
    | Преобразователи.Ссылка,
    | Преобразователи.НомерСтроки,
    | Преобразователи.Номер
    |ИЗ
    | Справочник.Приборы.Преобразователи КАК Преобразователи
    |ГДЕ
    | Преобразователи.Ссылка.Владелец В (&Владелец)
    |ИТОГИ
    | КОЛИЧЕСТВО(Преобразователи.ссылка.Номер)
    |ПО
    |Преобразователи.Ссылка";
    ЗапросП2.Параметры.Вставить("Владелец", Ссылка);
    ВыборкаП2 = ЗапросП2.Выполнить().Выбрать();
    
    Выборка = Запрос.Выполнить().Выбрать();
    ВыборкаПриборы = ЗапросПриборы.Выполнить().Выбрать();
    ВыборкаДатчики =ЗапросДатчики.Выполнить().Выбрать();
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Таб = макет.ПолучитьОбласть("Таб");
    Тело = Макет.ПолучитьОбласть("Тело");
    Подписи = макет.ПолучитьОбласть("Подписи");
    ТабДок.Очистить();
    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
    Если ВставлятьРазделительСтраниц Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    ОбластьЗаголовок.Параметры.Заполнить(Выборка);
    ТабДок.Вывести(ОбластьЗаголовок);
    Шапка.Параметры.Заполнить(Выборка);
    ТабДок.Вывести(Шапка, Выборка.Уровень());												  
    КонецЦикла;
    ТабДок.Вывести(Таб);
    Пока ВыборкаП2.Следующий() Цикл
    Если ВставлятьРазделительСтраниц Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    НСтр = НСтр + 1;
    Тело.Параметры["НСтр"] = НСтр;
    Тело.Параметры.Заполнить(ВыборкаП2);
    ТабДок.Вывести(Тело, ВыборкаП2.Уровень());
    КонецЦикла;
    
    Вот результат такого запроса:
    http://yadi.sk/d/qIcvoo8DFR3JK
    2-ка , скорее всего неправильно понятый реквизит номер - это номер изделия, а не количество. Но в любом случае результат не верен.
    А это с Левым Соединением (результат верный):
    http://yadi.sk/d/OluoAAFfFR3JF
  6. afinogen
    Offline

    afinogen Опытный в 1С

    Регистрация:
    28 фев 2011
    Сообщения:
    160
    Симпатии:
    0
    Баллы:
    26
    Код:
    	ЗапросП2=Новый Запрос;
    ЗапросП2.Текст ="Здесь текст запроса";
    ЗапросП2.Параметры.Вставить("Владелец", Ссылка);
    ВыборкаП2 = ЗапросП2.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);  //Обход  по группровкам -  таким образом вы сначала войдете во вледельца, а внутри него уже будете детали выбирать
    Пока ВыборкаП2.Следующий() Цикл
    Выборка = ВыборкаП2 .Выбрать();
    
    //здесь вывод в таб.док иеорархии добавляете
    
    Пока Выборка.Следующий() Цикл
    
    //здесь детализацию внутри иерархии
    КонецЦикла;
    КонецЦикла;
    

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