7.7 Вопрос по запросам.

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

  1. TopicStarter Overlay
    sergey484
    Offline

    sergey484 Опытный в 1С

    Регистрация:
    14 авг 2007
    Сообщения:
    165
    Симпатии:
    0
    Баллы:
    26
    Добрый день.

    Недавно занялся 1с. Появился вопрос по запросам.

    есть запрос:
    Запрос.Выполнить(
    "//{{ЗАПРОС
    |Период с ДатаС по ДатаПо;
    |Док=Документ.СтрокаВыпискиПриход.ТекущийДокумент,Документ.СтрокаВыпискиРасход.ТекущийДокумент;
    |Контрагент=Документ.СтрокаВыпискиПриход.Контрагент,Документ.СтрокаВыпискиРасход.Контрагент;
    |Направление=Документ.СтрокаВыпискиПриход.Направление,Документ.СтрокаВыпискиРасход.Направление;
    |Приход=Документ.СтрокаВыпискиПриход.Сумма;
    |Расход=Документ.СтрокаВыпискиРасход.Сумма;
    |Группировка Док;
    |Функция ИтогоПр=Сумма(Приход);
    |Функция ИтогоРх=Сумма(Расход);
    |"//}}ЗАПРОС
    );
    Вывожу данные в таблицу.
    Таб=СоздатьОбъект("Таблица");
    Пока Запрос.Группировка("Док")=1 цикл
    Рез=Запрос.Приход-Запрос.Расход;
    Таб.ВывестиСекцию("Данные");
    КонецЦикла;

    В итоге получаю данные из запроса в виде

    Контрагент | Приход | Расход | Итог |
    ---------------------------------------------
    Альфа | 5000 | 0 | 5000 |
    Альфа | 0 | 2000 | -2000|
    ----------------------------------------------


    Каким образаом можно сделать чтобы отчет был в виде

    Контрагент | Приход | Расход | Итог |
    ---------------------------------------------
    Альфа | 5000 | 2000 | 3000 |
    ----------------------------------------------


    Пробовал делать группировку по Контрагенту, но тогда получалось так:
    Контрагент | Приход | Расход | Итог |
    ---------------------------------------------
    Альфа | 0 | 2000 | -2000 |
    ----------------------------------------------

    Заранее благодарен за помошь.
  2. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Код:
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    Запрос.Выгрузить(ТЗ);
    ТЗ.Свернуть("Контрагент","Приход, Расход"); 
    
    Что то типа того.
  3. TopicStarter Overlay
    sergey484
    Offline

    sergey484 Опытный в 1С

    Регистрация:
    14 авг 2007
    Сообщения:
    165
    Симпатии:
    0
    Баллы:
    26
    а как обратиться к значению колонки?
    пишу следующее:
    ТЗ.ВыбратьСтроки();
    е=0;
    Пока ТЗ.ПолучитьСтроку()=1 цикл
    е=е+1;
    а=ТЗ.ПолучитьЗначение(е,2);
    Таб.ВывестиСекцию("й");
    КонецЦикла;
  4. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Ты создай эту ТЗ прям на форме и посмотри что в ней получается. Обращение к колонкам проще сделать через идентификатор. К примеру, есть у нас колонка с идентификатором "Контрагент" тогда чтобы присвоить значение из этой колонки переменной А надо так написать:
    Код:
    А=ТЗ.Контрагент;
    
    Естественно до этого должна быть строка выбрана.

    Погодика, а как делал группировку по Контрагенту? ВМЕСТО группировки по документу?
  5. TopicStarter Overlay
    sergey484
    Offline

    sergey484 Опытный в 1С

    Регистрация:
    14 авг 2007
    Сообщения:
    165
    Симпатии:
    0
    Баллы:
    26
    Создаю таблицу значений:
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Контрагент");
    ТЗ.НоваяКолонка("Направление");
    ТЗ.НоваяКолонка("Приход");
    ТЗ.НоваяКолонка("Расход");

    Заполняю ее данными из запроса, и пытаюсь обратиться к ней по полю "Направление"

    Запрос.Выгрузить(ТЗ);
    ТЗ.Свернуть("Контрагент,Направление","Приход, Расход");
    Таб=СоздатьОбъект("Таблица");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 цикл
    а=ТЗ.Направление;
    Таб.ВывестиСекцию("й");
    Таб.ВывестиСекцию("Данные");
    КонецЦикла;

    Появляется ошибка: "Поле агрегатного объекта не обнаружено (Направление)"


    Что я делаю не так?
  6. TopicStarter Overlay
    sergey484
    Offline

    sergey484 Опытный в 1С

    Регистрация:
    14 авг 2007
    Сообщения:
    165
    Симпатии:
    0
    Баллы:
    26

    В табличке всего одно поле, по которому сворачиваю т.е Контрагент

    А до того как свернул, в табличке присутствуют все поля которые получаю из запроса......
  7. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Не надо жестко задавать колонки ТЗ. Они сформируются автоматически при выгрузке из Запроса.
    Так, все таки, как делал группировку по Контрагенту? Сдается мне, что можно вообще без ТЗ обойтись.
  8. TopicStarter Overlay
    sergey484
    Offline

    sergey484 Опытный в 1С

    Регистрация:
    14 авг 2007
    Сообщения:
    165
    Симпатии:
    0
    Баллы:
    26
    Группировку делал следующим образом

    Группировать По Контрагент
  9. TopicStarter Overlay
    sergey484
    Offline

    sergey484 Опытный в 1С

    Регистрация:
    14 авг 2007
    Сообщения:
    165
    Симпатии:
    0
    Баллы:
    26
    Убрал создание колонок...
    результат не изменился, так же пишет что поле объекта не найдено...
  10. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Стесняюсь спросить, а что вообще такое "Направление"? Полазил в типовой ТиС 9.2 не нашел такого реквизита... Для какой конфигурации запрос пишется?
  11. TopicStarter Overlay
    sergey484
    Offline

    sergey484 Опытный в 1С

    Регистрация:
    14 авг 2007
    Сообщения:
    165
    Симпатии:
    0
    Баллы:
    26
    Направление, это доп. реквизит тапа справочник добавленый в документы самостоятельно. А пишется это для 1С:Предприниматель.
  12. TopicStarter Overlay
    sergey484
    Offline

    sergey484 Опытный в 1С

    Регистрация:
    14 авг 2007
    Сообщения:
    165
    Симпатии:
    0
    Баллы:
    26
    Спасибо за помошь! Всё, получилось...
    Оказывается конструктор в 1с тоже кое что умеет:) :unsure:
  13. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    В общем полазил я в конфигураторе. Действительно метод Выгрузить() как то странно в этом варианте работает. Есть следующее предложение тогда, заполнить ТЗ построчно результатами запроса. Т.е. вместо того чтобы выводить строки в таблицу печати, записывать сначала в ТЗ. А уже потом из ТЗ после свертки формировать таблицу вывода.

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