Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Отчет с отбором и без
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Мое задание состоит в том, чтоб сформировать отчет с отбором по контрагентам и без.... Имеется код: Процедура КнопкаСформироватьНажатие(Кнопка) Запрос=Новый запрос; Запрос.Текст= "ВЫБРАТЬ | ПродажиОбороты.Контрагенты КАК Контрагенты, | ПродажиОбороты.Номенклатура, | ПродажиОбороты.ДокументПродажи, | ПродажиОбороты.СуммаВыручкиОборот, | ПродажиОбороты.СебестоимостьПродажОборот, | ПродажиОбороты.СуммаВознагражденияПосредникуОборот, | ПродажиОбороты.ПрибыльОборот | ИЗ | РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиОбороты | ГДЕ ПродажиОбороты.контрагенты=&Контрагенты | | | ИТОГИ СУММА(ПрибыльОборот), | СУММА(СуммаВыручкиОборот), | СУММА(СебестоимостьПродажОборот), | СУММА(СуммаВознагражденияПосредникуОборот) |ПО | Контрагенты"; ПараметрКонПериода = ?(ЗначениеЗаполнено(КонПериода), КонецДня(КонПериода), КонецДня(ТекущаяДата())); Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачПериода)); Запрос.УстановитьПараметр("КонПериода", ПараметрКонПериода); Если ЗначениеЗаполнено(Контрагенты) Тогда Запрос.УстановитьПараметр("Контрагенты",Контрагенты); КонецЕсли; Результат=Запрос.Выполнить(); Макет=ОтчетОбъект.ПолучитьМакет("Макет"); ТабДок=элементыФормы.ПолеТабличногоДокумента1; ОблЗаг=Макет.ПолучитьОбласть("Заголовок"); ОблШап=Макет.ПолучитьОбласть("Шапка"); ОблКон=Макет.ПолучитьОбласть("Контрагент"); ОблДок=Макет.ПолучитьОбласть("Документ"); ТабДок.Очистить(); ТабДок.Вывести(ОблЗаг); ТабДок.Вывести(ОблШап); ТабДок.НачатьАвтогруппировкуСтрок(); ВыборкаКонтрагент=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагент.Следующий() Цикл ОблКон.Параметры.Заполнить(ВыборкаКонтрагент); ТабДок.Вывести(ОблКон, ВыборкаКонтрагент.Уровень()); ВыборкаДокумент=ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДокумент.Следующий() Цикл ОблДок.Параметры.Заполнить(ВыборкаДокумент); ТабДок.Вывести(ОблДок, ВыборкаДокумент.Уровень()); КонецЦикла; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); В рез-те выполнения есть следующие ошибки: 1. если не выбрать из списка контрагент, то ошибка звучит так:"Не задано значение параметра "Контрагенты" ГДЕ ПродажиОбороты.Контрагенты=<<?>>&Контрагенты" 2.если в списке выбрать какой-либо контрагент, то отображается только заголовок и шапка макета помогите пожалуйста разобраться в чем проблема! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2011, 15:33 |
|
||
|
Отчет с отбором и без
|
|||
|---|---|---|---|
|
#18+
Проблемы никакой нет - как запрос написан, так и работает. Есть условие "ГДЕ .... = ....." - оно и работает. В реальности же контрагент может быть элементом, группой, списком элементов, списком групп, или вообще не быть заданным( для всех..). В каждом из этих случаев текст запроса должен быть разным. А чтобы не заморачиваться с такими нюансами - начиная с платформы 8.0 есть ПостроительОтчета (который умеет подготавливать текст запроса в зависимости от содержания параметров) или Система Компоновки Данных (начиная с платформы 8.1). Если вам для практических целей надо - рекомендую последний вариант. Не панацея, но облегчает создание отчетов сильно. Или хотя бы посмотрите, как реальные отчеты сделаны в типовой конфигурации - в той же Торговле 10 практически все на Построителе, и 9/10 - подсовыванием своего текста запроса единственному экземпляру такого Построителя - остальное он делает сам из текста запроса. Посмотреть на тексты таких запросов, и особенно - на блоки в скобках {} Именно такие блоки Построитель умеет разворачивать при необходимости, либо выкидывать при ненадобности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2011, 16:56 |
|
||
|
Отчет с отбором и без
|
|||
|---|---|---|---|
|
#18+
Yeahkaterina, а если по простому, и "Контрагенты" у вас вероятно группа (которую с элементом в запросе сравнивать бесполезно - пустой результат будет), то достаточно как-то так разделить текст запроса: | РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиОбороты |"; если значениеЗаполнено(Контрагенты) тогда Запрос.Текст=Запрос.Текст+" ГДЕ ПродажиОбороты.контрагенты В ИЕРАРХИИ (&Контрагенты) |"; конецЕсли; Запрос.Текст=Запрос.Текст+"| ИТОГИ СУММА(ПрибыльОборот), и далее..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2011, 17:04 |
|
||
|
Отчет с отбором и без
|
|||
|---|---|---|---|
|
#18+
Спасибо! разобралась! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2011, 20:25 |
|
||
|
Отчет с отбором и без
|
|||
|---|---|---|---|
|
#18+
Yeahkaterina, В следующий раз спользуйте встроенную функцию СтрЗаменить(). Анализируйте тип значения параметра, и изменяйте вот этот фрагмент: Код: plaintext Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 18:57 |
|
||
|
Отчет с отбором и без
|
|||
|---|---|---|---|
|
#18+
в лучших домах парижу и филадельфии принято разливать чай через ситечко пользовать построитель отчета/запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2011, 10:37 |
|
||
|
|

start [/forum/topic.php?fid=28&fpage=86&tid=1521487]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 256ms |
| total: | 384ms |

| 0 / 0 |
