0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 25
|
|
1 | |
Помогите с запросом19.04.2010, 15:22. Показов 36959. Ответов 26
Метки нет Все метки)
(
Такая проблема: Имеется модуль обработки:
Процедура Выполнить() Перем Запрос, ТекстЗапроса, Таб, ОбъемНО, ВесНО, Вес4к, Вес3к, Вес2к, СуммаНО, Сумма4к, Сумма3к, Сумма2к, Сумма, Счетчик; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с дата1 по дата2; |ОбрабатыватьДокументы проведенные; |Обрабатывать НЕПомеченныеНаУдаление; |НачислениеЭН = Документ.НачисленияЭкологческогоНалога.ТекущийДокумент; |КО = Документ.НачисленияЭкологческогоНалога.КО; |Ном = Документ.НачисленияЭкологческогоНалога.НомерСтроки; |Клиент = Справочник.Контрагенты.Наименование; |Группировка Клиент Упорядочить По Клиент.Наименование; |Группировка НачислениеЭН; |" //}}ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Счетчик=0; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Таб.ВывестиСекцию("шапка"); Состояние("Заполнение выходной таблицы..."); Сумма=0;СуммаНО=0; Сумма4к=0; Сумма3к=0; Сумма2к=0; ВесНО=0; ОбъемНО=0; Вес4к=0; Вес3к=0; Вес2к=0; Пока Запрос.Группировка(1) = 1 Цикл Счетчик=Счетчик+1; Пока Запрос.Группировка(2)=1 цикл Если (Запрос.Клиент=Запрос.НачислениеЭН.Контрагенты) тогда Если (Врег(Запрос.КО)="НО")тогда СуммаНО=СуммаНО+Запрос.НачислениеЭН("Сумма"); ВесНО=ВесНО+Запрос.НачислениеЭН("Вес"); ОбъемНО=ОбъемНо+Запрос.НачислениеЭН("Объем"); КонецЕсли; Если (Врег(Запрос.КО)="4К")тогда Сумма4к=Сумма4к+Запрос.НачислениеЭН("Сумма"); Вес4к=Вес4к+Запрос.НачислениеЭН("Вес"); КонецЕсли; Если (Врег(Запрос.КО)="3К")тогда Сумма3к=Сумма3к+Запрос.НачислениеЭН("Сумма"); Вес3к=Вес3к+Запрос.НачислениеЭН("Вес"); КонецЕсли; Если (Врег(Запрос.КО)="2К")тогда Сумма2к=Сумма2к+Запрос.НачислениеЭН("Сумма"); Вес2к=Вес2к+запрос.НачислениеЭН("Вес"); КонецЕсли; КонецЕсли; КонецЦикла; Таб.ВывестиСекцию("Строка"); КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.Показать("Таблица", ""); КонецПроцедуры В печатную форму переношу <СуммаНО><Сумма4к><Сумма3к><Сумма2к> и <Запрос.Клиент> Клиентов переносит, а в колонках с суммами выводятся нули. В чем состоит задача: Имеется справочник контрагентов, в журнале документов имеются документы, где указано какому клиенту какая сумма начислена и за какой вид мусора (услуги вывоза мусора). Нужно просуммировать за период все начисленные суммы в соотвествующую колонку. Помогите решить проблему!
0
|
|
19.04.2010, 15:22 | |
Ответы с готовыми решениями:
26
Помогите с запросом Помогите С Запросом Помогите с запросом Помогите с запросом |
0 / 0 / 0
Регистрация: 28.03.2004
Сообщений: 1,913
|
|
19.04.2010, 15:32 | 2 |
Не увидел в запросе НИ ОДНОЙ функции. Бегом читать документацию или смотреть примеры запросов в любой типовой конфигурации!
0
|
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 25
|
|
27.04.2010, 11:46 | 3 |
Здравствуйте еще раз. Проблема решена... Но вот возникла еще одна: Имеется справочник Контрагенты, Имеется подчиненный ему справочник ВидыМусора, где указано за кем какие виды мусора числятся и лимит на каждый из них. В отчете необходимо увидеть кто из контрагентов превысил лимит (если превысил) и насколько. Объясните, что я не так делаю:
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб, Счетчик; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Утилизация = Документ.РаботыПоУтилизации.ТекущийДокумент; |Клиент = Документ.РаботыПоУтилизации.Клиент.ПолнНаименование; |УНН = Документ.РаботыПоУтилизации.Клиент.УНН; |КО = Документ.РаботыПоУтилизации.КлассОпасности; |Вес = Документ.РаботыПоУтилизации.Вес; |Функция ВесНО = Сумма(Вес) когда (КО=Перечисление.КлассОпасности.Неопасные); |Функция Вес4к = Сумма(Вес) когда (КО=Перечисление.КлассОпасности.Четвертый); |Функция Вес3к = Сумма(Вес) когда (КО=Перечисление.КлассОпасности.Третий); |Функция Вес2к = Сумма(Вес) когда (КО=Перечисление.КлассОпасности.Второй); |Группировка Клиент; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Счетчик = 0; Лим = 0; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Шапка"); Состояние("Заполнение выходной таблицы..."); Пока Запрос.Группировка(1) = 1 Цикл Счетчик=Счетчик+1; Лим = ПолучитьЛимит(Запрос.Клиент); Если Запрос.КО=Перечисление.КлассОпасности.Неопасные тогда Таб.ВывестиСекцию("СтрокаНО"); КонецЕсли; Если Запрос.КО=Перечисление.КлассОпасности.Четвертый тогда Таб.ВывестиСекцию("Строка4к"); КонецЕсли; Если Запрос.КО=Перечисление.КлассОпасности.Третий тогда Таб.ВывестиСекцию("Строка3к"); КонецЕсли; Если Запрос.КО=Перечисление.КлассОпасности.Второй тогда Таб.ВывестиСекцию("Строка2к"); КонецЕсли; КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры
0
|
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
|
|
27.04.2010, 13:24 | 4 |
![]() Попробую вычислить. Если функция ПолучитьЛимит(Запрос.Клиент); пытается обработать подчиненный справочник, ничего не выйдет, ибо Запрос.Клиент - строка, а не элемент справочника
0
|
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 25
|
|
28.04.2010, 16:28 | 5 |
Спасибо за подсказку... Как можно справиться с задачей иным способом??? Имею в виду ПолучитьЛимит
0
|
1 / 1 / 0
Регистрация: 04.12.2005
Сообщений: 1,588
|
|
28.04.2010, 17:30 | 6 |
попробую предположить. в строке
![]()
0
|
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
|
|
28.04.2010, 18:29 | 7 |
![]() Клиент = Документ.РаботыПоУтилизации.Клиент; - вот тогда и будет ссылка, это же 7.7 :wacko:
0
|
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 25
|
|
29.04.2010, 11:41 | 8 |
Решила поступить так: теперь у меня в самом документе есть реквизит РаботыПоУтилизации.Лимит
Будет ли функционировать такой запрос: Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб, Счетчик; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Утилизация = Документ.РаботыПоУтилизации.ТекущийДокумент; |Клиент = Документ.РаботыПоУтилизации.Клиент.Наименование; |УНН = Документ.РаботыПоУтилизации.УНН; |КО = Документ.РаботыПоУтилизации.КлассОпасности; |Вес = Документ.РаботыПоУтилизации.Вес; |Лим = Документ.РаботыПоУтилизации.Лимит; |Функция ВесНО = Сумма(Вес) когда (КО=Перечисление.КлассОпасности.Неопасные); |Функция Вес4к = Сумма(Вес) когда (КО=Перечисление.КлассОпасности.Четвертый); |Функция Вес3к = Сумма(Вес) когда (КО=Перечисление.КлассОпасности.Третий); |Функция Вес2к = Сумма(Вес) когда (КО=Перечисление.КлассОпасности.Второй); |Условие(Запрос.ВесНО>Запрос.Лим); |Условие(Запрос.Вес4к>Запрос.Лим); |Условие (Запрос.Вес3к>Запрос.Лим); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Счетчик = 0; Лим = 0; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Свод"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Шапка"); Состояние("Заполнение выходной таблицы..."); Пока Запрос.Группировка(1) = 1 Цикл Счетчик=Счетчик+1; Если Запрос.КО=Перечисление.КлассОпасности.Неопасные тогда Таб.ВывестиСекцию("СтрокаНО"); КонецЕсли; Если Запрос.КО=Перечисление.КлассОпасности.Четвертый тогда Таб.ВывестиСекцию("Строка4к"); КонецЕсли; Если Запрос.КО=Перечисление.КлассОпасности.Третий тогда Таб.ВывестиСекцию("Строка3к"); КонецЕсли; КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры Меня интересует все Условия в запросе должны выполняться одновременно для того чтобы попасть в выборку? Мой отчет выдает только "Шапку" и "Подвал", хотя превышение лимита есть...
0
|
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
|
|
29.04.2010, 12:05 | 9 |
правильнее писать |Функция ВесНО = Сумма(Вес) когда ((КО=Перечисление.КлассОпасности.Неопасные) и (Вес>Лим)); насчет пустоты Нет группировок - нет выходной таблицы
0
|
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
|
|
29.04.2010, 12:51 | 10 |
![]() так как запрос плохо дружит с отладчиком, попробуй выгрузить его в таблицу значений (Запрос.Выгрузить(ТЗ)), при просмотре последней будет ясно, как он отработал
0
|
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 25
|
|
29.04.2010, 13:16 | 11 |
0
|
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
|
|
29.04.2010, 13:52 | 12 |
Тогда и условие в запросе не нужно, а анализировать придется при его обработке
0
|
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
|
|
29.04.2010, 14:43 | 13 |
Условие на результат выполнения функции в запросе поставить невозможно. Только при обработке результатов запроса.
0
|
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 25
|
|
02.05.2010, 10:55 | 14 |
Большое спасибо... Все учту!
0
|
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 25
|
|
02.05.2010, 15:06 | 15 |
Что-то у меня не совсем все гладко ни с запросом, ни с таблицей значений... хотя убрала условия сравниваю с лимитами в цикле по группировке. А в отчете все еще ничего не изменилось только "Шапка" да "Подвал".
0
|
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
|
|
03.05.2010, 00:36 | 16 |
А как выглядит ТЗ после выгрузки в нее запроса ?
0
|
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 25
|
|
03.05.2010, 11:34 | 17 |
Я так понимаю, что ТЗ после выгрузки имеет те же имена колонок, что и переменные запроса. Я обращаюсь к ТЗ из печатной формы. Но вот как раз здесь и ничего не выводится... Совсем пусто (ни нулей: вообще ничего). можно ли ТЗ просмотреть из модуля?
0
|
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
|
|
03.05.2010, 12:38 | 18 |
Создай таблицу значений на форме с именем твой таблицы значений, а в модуле закомментируй строчку создания таблицы значений.
0
|
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 25
|
|
03.05.2010, 12:51 | 19 |
0
|
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
|
|
03.05.2010, 13:10 | 20 |
Значит, запрос не срабатывает
Может, опять группировок нет ?
0
|
03.05.2010, 13:10 | |
03.05.2010, 13:10 | |
Помогаю со студенческими работами здесь
20
Помогите с запросом Помогите с запросом помогите с запросом Помогите с запросом помогите с запросом Помогите с запросом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |