7.7 Отчет

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Steelrat, 20 апр 2006.

  1. TopicStarter Overlay
    Steelrat
    Offline

    Steelrat

    Регистрация:
    20 апр 2006
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Помогите пожалуйста!

    Может кто нибудь подскажет, как в отчете прописать чтобы выдрать все строки табличной части какого - нибудь документа?

    Заранее благодарен
  2. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    Сформулируй мысль более четко, плз.
  3. vip6374
    Offline

    vip6374

    Регистрация:
    20 май 2006
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    |Группировка СтрокаДокумента;
  4. Гость
    Online

    Гость Гость Гость

    выгрузить Контекст.ТабличнаяЧасть
  5. Slin
    Offline

    Slin

    Регистрация:
    15 авг 2006
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    У меня подобная проблемма, как в первом сабже.
    Я вообще полный новичок в этом деле. Делаю конфигурацию для учета картриджей (приход/списание)
    Попытался создать свой первый в жизни отчет. Причем переделал его из другого чьего-то отчета.
    Почему-то вытаскиват только одну строку из документа. Точнее не одну строку, а по одной с одинаковых наименований, т.е. если у меня в документе 9 строк и в них по три одинаковых картриджа, то в отчете отображаються только три по одному с каждого наименования(при этом не понятно каких именно).
    Вот сам модуль отчета:
    //*******************************************
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы все;
    |ДатаДок = Документ.ПринятоеОборудование.ДатаДок;
    |НомерНакладной = Документ.ПринятоеОборудование.ОНомерНакладной;
    |ПринятоеОборудование = Документ.ПринятоеОборудование.Товар;
    |Место = Документ.ПринятоеОборудование.Место;
    |МестоИспользования = Документ.ПринятоеОборудование.МестоИспользования;
    |ТекущийДокумент = Документ.ПринятоеОборудование.ТекущийДокумент;
    |ДатаУстановки = Документ.ПринятоеОборудование.ДатаУстановки;
    |ДатаСнятия = Документ.ПринятоеОборудование.ДатаСнятия;
    |ДатаСписания = Документ.ПринятоеОборудование.ДатаСписания;
    |Группировка ПринятоеОборудование;
    |"//}}ЗАПРОС

    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
    // Заполнение полей ПринятоеОборудование
    Таб.ВывестиСекцию("ПринятоеОборудование");
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
    КонецПроцедуры


    Возможно я зря использую Запрос..

    Пробовал, почему-то выводит все строки только из последнего по дате документа, и то только если |Группировка ПринятоеОборудование; убрать..

    Может поможете кто скромному ньюбику?
  6. Amishechka
    Offline

    Amishechka Опытный в 1С

    Регистрация:
    8 сен 2006
    Сообщения:
    361
    Симпатии:
    1
    Баллы:
    26
    Добавь в запрос второй группировкой
    |Группировка ТекущийДокумент;
    и
    |Группировка СтрокаДокумента;

    Получим
    Пока Запрос.Группировка(1) = 1 Цикл
    Пока Запрос.Группировка(2) = 1 Цикл
    Пока Запрос.Группировка(3) = 1 Цикл
    // Заполнение полей ПринятоеОборудование
    Таб.ВывестиСекцию("ПринятоеОборудование");
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;

    А вообще, если документ двигает регистры, то запрос лучше строить по регистрам. А то вдруг ты изменишь проведенный документ без перепроведения, и у тебя в документе будет одно, а в регистрах - совсем другое.
  7. Slin
    Offline

    Slin

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

    Slin

    Регистрация:
    15 авг 2006
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Теперь у меня возникает следующий вопрос!
    Мне нужен отчет подобный описаному выше, только теперь мне нужно, чтобы отображались не все строки со всех документов, а те строки, которые удовлетворяют небольшим условиям.
    Например мне нужен отчет, в котором будут выводиться строки документов содержащие заполненую графу ДатаУстановки и пустую строку ДатаСнятия.

    Подскажите, пожалуйста, как это можно сделать?
  9. mishgan
    Offline

    mishgan

    Регистрация:
    3 июл 2006
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Заменяем : Пока Запрос.Группировка("СтрокаДокумента")=1 Цикл
    // Заполнение полей ПринятоеОборудование
    Таб.ВывестиСекцию("ПринятоеОборудование");
    КонецЦикла;
    на: Пока Запрос.Группировка("СтрокаДокумента")=1 Цикл
    // Заполнение полей ПринятоеОборудование
    Если (ПустоеЗначение(Запрос.ДатаУстановки)=0)и(ПустоеЗначение(Запрос.ДатаСнятия)=1) тогда
    Таб.ВывестиСекцию("ПринятоеОборудование");
    Иначе
    Продолжить;
    КонецЕсли;
    КонецЦикла;
    Естественно, конструкция ПустоеЗначение() здесь использована как универсальная....
  10. Amishechka
    Offline

    Amishechka Опытный в 1С

    Регистрация:
    8 сен 2006
    Сообщения:
    361
    Симпатии:
    1
    Баллы:
    26
    Зачем так? Просто в запрос рисуем строку:
    |Условие((ПустоеЗначение(ДатаУстановки)=0)и(ПустоеЗначение(ДатаСнятия)=1));
  11. Slin
    Offline

    Slin

    Регистрация:
    15 авг 2006
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    Супер! Все работает!
    Ограменное пасибо Amishechka и mishgan - вы молодцы!

    Теперь еще хотелось бы для удобства в отчете получить сортировку по идентичным |ПринятоеОборудование = Документ.ПринятоеОборудование.Товар;
    То есть хочеться чтобы сортировака выполнялась по алфовитному названию товара, а не по дате.
    Возможно ли это? и как?
  12. Amishechka
    Offline

    Amishechka Опытный в 1С

    Регистрация:
    8 сен 2006
    Сообщения:
    361
    Симпатии:
    1
    Баллы:
    26
    оставь тогда группировку по нему как самую первую

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