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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
Цитата Сообщение от Irysha
Объясните, что я не так делаю
А что не так получается ?

Попробую вычислить.
Если функция
ПолучитьЛимит(Запрос.Клиент);
пытается обработать подчиненный справочник, ничего не выйдет, ибо Запрос.Клиент - строка, а не элемент справочника
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
попробую предположить. в строке


Цитата Сообщение от Irysha
|Клиент = Документ.РаботыПоУтилизации.Клиент.ПолнНаименование;
стоит убрать .ПолнНаименование или заменить на .Ссылка
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
28.04.2010, 18:29 7
Цитата Сообщение от KiR
заменить на .Ссылка
не прокатит

Клиент = Документ.РаботыПоУтилизации.Клиент; - вот тогда и будет ссылка, это же 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
|Условие(Запрос.ВесНО>Запрос.Лим);
|Условие(Запрос.Вес4к>Запрос.Лим);
|Условие (Запрос.Вес3к>Запрос.Лим);
и стаким кодом ЭТО работает???

правильнее писать |Функция ВесНО = Сумма(Вес) когда ((КО=Перечисление.КлассОпасности.Неопасные) и (Вес>Лим));

насчет пустоты
Нет группировок - нет выходной таблицы
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
29.04.2010, 12:51 10
Цитата Сообщение от Irysha
Мой отчет выдает только "Шапку" и "Подвал", хотя превышение лимита есть...
Irysha, вместо того, чтобы выкладывать значительные куски кода, осмелюсь порекомендовать следующее :
так как запрос плохо дружит с отладчиком, попробуй выгрузить его в таблицу значений (Запрос.Выгрузить(ТЗ)),
при просмотре последней будет ясно, как он отработал
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2010, 13:10
Помогаю со студенческими работами здесь

Помогите с запросом
Доброе времени суток.Столкнулся с такой бедой, не знаю как написать запрос. Суть его в том что есть...

Помогите с запросом
Здравствуйте форумчане, помогите с запросм разобраться. Есть запрос типа Выбрать |ВЫБРАТЬ...

помогите с запросом
Платформа 8.2 Здравствуйте! Подскажите пжста как можно запросом выбрать по дням остатки...

Помогите с запросом
Здравствуйте! Подскажите ка мне по такой проблеме.Есть регистр в который заносятся некоторые...

помогите с запросом
вроде все правильно написала ,но не идет! ...

Помогите с запросом
Добрый день!!! Подскажите кто может, как запросом получить информацию о том какой документ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru