helpf.pro
Регистрация

Не работает свертка ТЗ в 7.7 почему то...

soda
09.10.2009 04:32Прочитано: 5212
Нарисован запрос, по запросу заполнена ТЗ с условиями, делаю свертку ТЗ по 2 колонкам остальные 14 полей должны суммироваться, а они не суммируются *16 помогите кто чем может, может сталкивались с таким
Модуль:
Процедура Печать(ТЗ)

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");

Таб.ВывестиСекцию("Шапка");

ТЗ.Свернуть("Клиент, Отсрочка","ТЗ, ТЗ5, ТЗ10, ТЗ20, ТЗ30, ТЗ60, ПЗ, ПЗ05, ПЗ510, ПЗ1020, ПЗ20, Авансы, ОЗ");

ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;

Таб.ВывестиСекцию("Подвал");
Таб.Опции(,,5);

Таб.Показать("Кредиторская задолженность",,);

КонецПроцедуры

Процедура ОтчетПоРегистрам()
Перем Запрос, ТекстЗапроса;

ТЗ = СоздатьОбъект("ТаблицаЗначений");

ТЗ.НоваяКолонка("ОЗ");
ТЗ.НоваяКолонка("ТЗ");
ТЗ.НоваяКолонка("ПЗ");
ТЗ.НоваяКолонка("ТЗ5");
ТЗ.НоваяКолонка("ТЗ10");
ТЗ.НоваяКолонка("ТЗ20");
ТЗ.НоваяКолонка("ТЗ30");
ТЗ.НоваяКолонка("ТЗ60");
ТЗ.НоваяКолонка("ПЗ05");
ТЗ.НоваяКолонка("ПЗ510");
ТЗ.НоваяКолонка("ПЗ1020");
ТЗ.НоваяКолонка("ПЗ20");
ТЗ.НоваяКолонка("Авансы");
ТЗ.НоваяКолонка("Возвраты");
ТЗ.НоваяКолонка("Отсрочка");
ТЗ.НоваяКолонка("Клиент");



Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Фирма=Регистр.ОплатыИПредоплаты.Фирма;
|Клиент=Регистр.ОплатыИПредоплаты.Клиент;
|ТипОперации=Регистр.ОплатыИПредоплаты.ТипОперации;
|ФлагПродажи=Регистр.ОплатыИПредоплаты.ФлагПродажи;
|Руб=Регистр.ОплатыИПредоплаты.СуммаРублевая;
|Док=Регистр.ОплатыИПредоплаты.ПоДокументу;
|СрокОтсрочкиПлатежа = Регистр.ОплатыИПредоплаты.Договор.СрокОтсрочкиПлатежа;
|Условие (Фирма в ВыбФирма);
|Условие (Клиент в ВыбКлиент);
|Условие (ТипОперации=2);
|Группировка Клиент без групп;
|Группировка ФлагПродажи;
|Группировка Док;
|Функция КонРуб=КонОст(Руб);";
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
//Пер = 0;
Пока Запрос.Группировка(1)=1 Цикл
Пока Запрос.Группировка(2)=1 Цикл
Пока Запрос.Группировка(3)=1 Цикл
ТЗ.НоваяСтрока();
ТЗ.Клиент = Запрос.Клиент;
ТЗ.Отсрочка = Запрос.СрокОтсрочкиПлатежа;

Если Запрос.ФлагПродажи <> 2 Тогда
ТЗ.ОЗ = Запрос.КонРуб;

//Пер = Пер + Запрос.КонРуб;
//Сообщить("Дата документа: " + Запрос.Док.ДатаДок + ", число дней отскрочки: " + Запрос.СрокОтсрочкиПлатежа + ", число дней документу: " + (Число(ДатаОтчета-Запрос.Док.ДатаДок)) + ", Сумма: " + Пер + ", сумма документа: " + Запрос.Док.Итог("Всего") + ", дней просрочен: " + (Число(ДатаОтчета-Запрос.Док.ДатаДок) - Запрос.СрокОтсрочкиПлатежа));
Если Число(ДатаОтчета-Запрос.Док.ДатаДок) >= Запрос.СрокОтсрочкиПлатежа Тогда
ТЗ.ТЗ = Запрос.КонРуб;
КонецЕсли;
Если (Число(ДатаОтчета-Запрос.Док.ДатаДок) + 5) >= Запрос.СрокОтсрочкиПлатежа Тогда
ТЗ.ТЗ5 = Запрос.КонРуб;
КонецЕсли;
Если (Число(ДатаОтчета-Запрос.Док.ДатаДок) + 10) >= Запрос.СрокОтсрочкиПлатежа Тогда
ТЗ.ТЗ10 = Запрос.КонРуб;
КонецЕсли;
Если (Число(ДатаОтчета-Запрос.Док.ДатаДок) + 20) >= Запрос.СрокОтсрочкиПлатежа Тогда
ТЗ.ТЗ20 = Запрос.КонРуб;
КонецЕсли;
Если (Число(ДатаОтчета-Запрос.Док.ДатаДок) + 30) >= Запрос.СрокОтсрочкиПлатежа Тогда
ТЗ.ТЗ30 = Запрос.КонРуб;
КонецЕсли;
Если (Число(ДатаОтчета-Запрос.Док.ДатаДок) + 60) >= Запрос.СрокОтсрочкиПлатежа Тогда
ТЗ.ТЗ60 = Запрос.КонРуб;
КонецЕсли;
Если Число(ДатаОтчета-Запрос.Док.ДатаДок) > Запрос.СрокОтсрочкиПлатежа Тогда
ТЗ.ПЗ = Запрос.КонРуб;
КонецЕсли;
Если ((Число(ДатаОтчета-Запрос.Док.ДатаДок) - Запрос.СрокОтсрочкиПлатежа) >= 0) Тогда
Если ((Число(ДатаОтчета-Запрос.Док.ДатаДок) - Запрос.СрокОтсрочкиПлатежа) <= 5) Тогда
ТЗ.ПЗ05 = Число(Запрос.КонРуб);
КонецЕсли;
КонецЕсли;
Если ((Число(ДатаОтчета-Запрос.Док.ДатаДок) - Запрос.СрокОтсрочкиПлатежа) >= 5) Тогда
Если ((Число(ДатаОтчета-Запрос.Док.ДатаДок) - Запрос.СрокОтсрочкиПлатежа) <= 10) Тогда
ТЗ.ПЗ510 = Число(Запрос.КонРуб);
КонецЕсли;
КонецЕсли;
Если ((Число(ДатаОтчета-Запрос.Док.ДатаДок) - Запрос.СрокОтсрочкиПлатежа) >= 10) Тогда
Если ((Число(ДатаОтчета-Запрос.Док.ДатаДок) - Запрос.СрокОтсрочкиПлатежа) <= 20) Тогда
ТЗ.ПЗ1020 = Число(Запрос.КонРуб);
КонецЕсли;
КонецЕсли;
Если ((Число(ДатаОтчета-Запрос.Док.ДатаДок) - Запрос.СрокОтсрочкиПлатежа) >= 20) Тогда
ТЗ.ПЗ20 = Число(Запрос.КонРуб);
КонецЕсли;
Иначе
ТЗ.Авансы = Запрос.КонРуб;
КонецЕсли;

КонецЦикла;
КонецЦикла;
КонецЦикла;

Печать(ТЗ);

КонецПроцедуры
Yandex
Возможно, вас также заинтересует
Реклама на портале
soda
09.10.2009 04:34Ответ № 1
Забыла сказать не сворачивает только по колонкам с двумя условиями, типа:
Если ((Число(ДатаОтчета-Запрос.Док.ДатаДок) - Запрос.СрокОтсрочкиПлатежа) >= 5) Тогда
Если ((Число(ДатаОтчета-Запрос.Док.ДатаДок) - Запрос.СрокОтсрочкиПлатежа) <= 10) Тогда
ТЗ.ПЗ510 = Число(Запрос.КонРуб);
КонецЕсли;
КонецЕсли;
E_Migachev
22.10.2009 20:14Ответ № 2
Суммируются только числовые поля.
А не сворачиваются - значит где-то в строках разные значения.
fenix74rus
05.11.2009 11:09Ответ № 3
ТЗ = СоздатьОбъект("ТаблицаЗначений");

ТЗ.НоваяКолонка("ОЗ","Число");
ТЗ.НоваяКолонка("ТЗ","Число");
ТЗ.НоваяКолонка("ПЗ","Число");
ТЗ.НоваяКолонка("ТЗ5","Число");
ТЗ.НоваяКолонка("ТЗ10","Число");
ТЗ.НоваяКолонка("ТЗ20","Число");
ТЗ.НоваяКолонка("ТЗ30","Число");
ТЗ.НоваяКолонка("ТЗ60","Число");
ТЗ.НоваяКолонка("ПЗ05","Число");
ТЗ.НоваяКолонка("ПЗ510","Число");
ТЗ.НоваяКолонка("ПЗ1020","Число");
ТЗ.НоваяКолонка("ПЗ20","Число");
ТЗ.НоваяКолонка("Авансы","Число");
ТЗ.НоваяКолонка("Возвраты","Число");
ТЗ.НоваяКолонка("Отсрочка");
ТЗ.НоваяКолонка("Клиент");

Попробуй сделать так, возможно гдето из запроса приходит пустое значение.
E_Migachev
06.11.2009 18:10Ответ № 4
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.