Нет документов в запросе
22.01.2013
14:08
#1
"По сабжу: конфа переписанная от ТиС. В запрос не попадают документы, хотя они есть.
Процедура Отчет()
Если ПустоеЗначение(ВыбКонПериода)=1 Тогда
ВыбКонПериода=ТекущаяДата();
КонецЕсли;
Если ВыбКонПериода>ПолучитьДатуТА() Тогда
ВыбКонПериода=ПолучитьДатуТА();
КонецЕсли;
Если ПустоеЗначение(ВыбНачПериода)=1 Тогда
ВыбНачПериода=НачМесяца(ВыбКонПериода);
КонецЕсли;
ГруппаПокупатели=СоздатьОбъект("Справочник.Клиенты");
ГруппаПокупатели.НайтиПоКоду("3",0);
ГруппаПокупатели=ГруппаПокупатели.ТекущийЭлемент();
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|КлиентЗап = Регистр.Взаиморасчеты.Клиент;
|УсловияДоговора = Регистр.Взаиморасчеты.Клиент.УсловияДоговора;
|СуммаБазовая = Регистр.Взаиморасчеты.СуммаБазовая;
|Функция СуммаКонОст = КонОст(СуммаБазовая);
|Группировка КлиентЗап без групп;
|Группировка Документ;
|Условие(КлиентЗап.ПринадлежитГруппе(ГруппаПокупатели)=1);
|"//}}ЗАПРОС
;
Если ТолькоСДоговорами=1 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(ПустоеЗначение(УсловияДоговора)=0);";
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Отчет");
Таб.ВывестиСекцию("Шапка");
Пока Запрос.Группировка("КлиентЗап") = 1 Цикл
ПоследнийПлатеж=ПолучитьПустоеЗначение("Дата");
Пока Запрос.Группировка(2) = 1 Цикл
Док=Запрос.ТекДок;
Сообщить("---ЫыЫ---");
Если Док.Вид()="ПриходДенегНаСчет" Тогда
ПоследнийПлатеж=Док.ДатаДок;
КонецЕсли;
КонецЦикла;
Клиент=Запрос.КлиентЗап;
Остаток=Запрос.СуммаКонОст;
Если Остаток<0 Тогда
Остаток=-1*Остаток;
КонецЕсли;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Итог=Запрос.СуммаКонОст;
Если Итог<0 Тогда
Итог=-1*Итог;
КонецЕсли;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Долги контрагентов", """");
КонецПроцедуры
Почему?!"
Процедура Отчет()
Если ПустоеЗначение(ВыбКонПериода)=1 Тогда
ВыбКонПериода=ТекущаяДата();
КонецЕсли;
Если ВыбКонПериода>ПолучитьДатуТА() Тогда
ВыбКонПериода=ПолучитьДатуТА();
КонецЕсли;
Если ПустоеЗначение(ВыбНачПериода)=1 Тогда
ВыбНачПериода=НачМесяца(ВыбКонПериода);
КонецЕсли;
ГруппаПокупатели=СоздатьОбъект("Справочник.Клиенты");
ГруппаПокупатели.НайтиПоКоду("3",0);
ГруппаПокупатели=ГруппаПокупатели.ТекущийЭлемент();
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|КлиентЗап = Регистр.Взаиморасчеты.Клиент;
|УсловияДоговора = Регистр.Взаиморасчеты.Клиент.УсловияДоговора;
|СуммаБазовая = Регистр.Взаиморасчеты.СуммаБазовая;
|Функция СуммаКонОст = КонОст(СуммаБазовая);
|Группировка КлиентЗап без групп;
|Группировка Документ;
|Условие(КлиентЗап.ПринадлежитГруппе(ГруппаПокупатели)=1);
|"//}}ЗАПРОС
;
Если ТолькоСДоговорами=1 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(ПустоеЗначение(УсловияДоговора)=0);";
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Отчет");
Таб.ВывестиСекцию("Шапка");
Пока Запрос.Группировка("КлиентЗап") = 1 Цикл
ПоследнийПлатеж=ПолучитьПустоеЗначение("Дата");
Пока Запрос.Группировка(2) = 1 Цикл
Док=Запрос.ТекДок;
Сообщить("---ЫыЫ---");
Если Док.Вид()="ПриходДенегНаСчет" Тогда
ПоследнийПлатеж=Док.ДатаДок;
КонецЕсли;
КонецЦикла;
Клиент=Запрос.КлиентЗап;
Остаток=Запрос.СуммаКонОст;
Если Остаток<0 Тогда
Остаток=-1*Остаток;
КонецЕсли;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Итог=Запрос.СуммаКонОст;
Если Итог<0 Тогда
Итог=-1*Итог;
КонецЕсли;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Долги контрагентов", """");
КонецПроцедуры
Почему?!"
22.01.2013
14:19
#3
"Поправил. Все равно никак...
Процедура Отчет()
Если ПустоеЗначение(ВыбКонПериода)=1 Тогда
ВыбКонПериода=ТекущаяДата();
КонецЕсли;
Если ВыбКонПериода>ПолучитьДатуТА() Тогда
ВыбКонПериода=ПолучитьДатуТА();
КонецЕсли;
Если ПустоеЗначение(ВыбНачПериода)=1 Тогда
ВыбНачПериода=НачМесяца(ВыбКонПериода);
КонецЕсли;
ГруппаПокупатели=СоздатьОбъект("Справочник.Клиенты");
ГруппаПокупатели.НайтиПоКоду("3",0);
ГруппаПокупатели=ГруппаПокупатели.ТекущийЭлемент();
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|КлиентЗап = Регистр.Взаиморасчеты.Клиент;
|УсловияДоговора = Регистр.Взаиморасчеты.Клиент.УсловияДоговора;
|СуммаБазовая = Регистр.Взаиморасчеты.СуммаБазовая;
|ТекДок = Регистр.Взаиморасчеты.ТекущийДокумент;
|Функция СуммаКонОст = КонОст(СуммаБазовая);
|Группировка КлиентЗап без групп;
|Группировка ТекДок;
|Условие(КлиентЗап.ПринадлежитГруппе(ГруппаПокупатели)=1);
|"//}}ЗАПРОС
;
Если ТолькоСДоговорами=1 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(ПустоеЗначение(УсловияДоговора)=0);";
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Отчет");
Таб.ВывестиСекцию("Шапка");
Пока Запрос.Группировка("КлиентЗап") = 1 Цикл
ПоследнийПлатеж=ПолучитьПустоеЗначение("Дата");
Пока Запрос.Группировка("ТекДок") = 1 Цикл
Док=Запрос.ТекДок;
Сообщить("---ЫыЫ---");
Если Док.Вид()="ПриходДенегНаСчет" Тогда
ПоследнийПлатеж=Док.ДатаДок;
КонецЕсли;
КонецЦикла;
Клиент=Запрос.КлиентЗап;
Остаток=Запрос.СуммаКонОст;
//Здесь бы разобраться кто кому и чего должен...
Если Остаток<0 Тогда
Остаток=-1*Остаток;
КонецЕсли;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
//Считать не так, а вдруг нам заплатили на перед и как-бы мы должны
Итог=Запрос.СуммаКонОст;
Если Итог<0 Тогда
Итог=-1*Итог;
КонецЕсли;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Долги контрагентов", """");
КонецПроцедуры"
Процедура Отчет()
Если ПустоеЗначение(ВыбКонПериода)=1 Тогда
ВыбКонПериода=ТекущаяДата();
КонецЕсли;
Если ВыбКонПериода>ПолучитьДатуТА() Тогда
ВыбКонПериода=ПолучитьДатуТА();
КонецЕсли;
Если ПустоеЗначение(ВыбНачПериода)=1 Тогда
ВыбНачПериода=НачМесяца(ВыбКонПериода);
КонецЕсли;
ГруппаПокупатели=СоздатьОбъект("Справочник.Клиенты");
ГруппаПокупатели.НайтиПоКоду("3",0);
ГруппаПокупатели=ГруппаПокупатели.ТекущийЭлемент();
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|КлиентЗап = Регистр.Взаиморасчеты.Клиент;
|УсловияДоговора = Регистр.Взаиморасчеты.Клиент.УсловияДоговора;
|СуммаБазовая = Регистр.Взаиморасчеты.СуммаБазовая;
|ТекДок = Регистр.Взаиморасчеты.ТекущийДокумент;
|Функция СуммаКонОст = КонОст(СуммаБазовая);
|Группировка КлиентЗап без групп;
|Группировка ТекДок;
|Условие(КлиентЗап.ПринадлежитГруппе(ГруппаПокупатели)=1);
|"//}}ЗАПРОС
;
Если ТолькоСДоговорами=1 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(ПустоеЗначение(УсловияДоговора)=0);";
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Отчет");
Таб.ВывестиСекцию("Шапка");
Пока Запрос.Группировка("КлиентЗап") = 1 Цикл
ПоследнийПлатеж=ПолучитьПустоеЗначение("Дата");
Пока Запрос.Группировка("ТекДок") = 1 Цикл
Док=Запрос.ТекДок;
Сообщить("---ЫыЫ---");
Если Док.Вид()="ПриходДенегНаСчет" Тогда
ПоследнийПлатеж=Док.ДатаДок;
КонецЕсли;
КонецЦикла;
Клиент=Запрос.КлиентЗап;
Остаток=Запрос.СуммаКонОст;
//Здесь бы разобраться кто кому и чего должен...
Если Остаток<0 Тогда
Остаток=-1*Остаток;
КонецЕсли;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
//Считать не так, а вдруг нам заплатили на перед и как-бы мы должны
Итог=Запрос.СуммаКонОст;
Если Итог<0 Тогда
Итог=-1*Итог;
КонецЕсли;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Долги контрагентов", """");
КонецПроцедуры"
22.01.2013
15:01
#4
"Для того чтобы в запросе написать
все таки не обязательно описывать откуда брать эти данные. "Документ" считается предикатом и имеется всегда, подразумевая под собой "документ движения", так что первый вариант запроса был самодостаточным в этом смысле.
Теперь про то почему не работает. Группировка по документам движений, которые являются по смыслу аналитикой какого то выполненного оборота по регистру, подразумевает наличие в запросе функиций, которые будут как то этот оборот обобщать. Проще говоря, в ваш запрос надо добавить еще:
не смотря на то, что они вам, вроде бы как и не нужны вовсе, тогда заработает."
|Группировка Документ;
все таки не обязательно описывать откуда брать эти данные. "Документ" считается предикатом и имеется всегда, подразумевая под собой "документ движения", так что первый вариант запроса был самодостаточным в этом смысле.
Теперь про то почему не работает. Группировка по документам движений, которые являются по смыслу аналитикой какого то выполненного оборота по регистру, подразумевает наличие в запросе функиций, которые будут как то этот оборот обобщать. Проще говоря, в ваш запрос надо добавить еще:
|Функция СуммаПриход = Приход(СуммаБазовая);
|Функция СуммаРасход = Расход(СуммаБазовая);
не смотря на то, что они вам, вроде бы как и не нужны вовсе, тогда заработает."
Читают тему
(гостей: 1)