|
Как убрать из отчета строки с нулевым остатком долга? | ☑ | ||
---|---|---|---|---|
0
Pures
20.02.13
✎
10:16
|
Дублирую тему потому что так и не разобрался.
Может кто подскажет как доработать отчет по дебиторской задолженности. Вставили в него новые колонки "Возврат" и он стал выводить те строки где был возврат но долга нет, как бы это исправить? Вот код отчета: Вот код отчета. Процедура ДействияФормыОтчетСформировать(Кнопка) ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; Отчет(ТабДок, Дата, Агенты); ВсегоСтрок = 1 - ТабДок.Количество(); Для СчетчикМинус = ВсегоСтрок По 0 Цикл Счетчик = - СчетчикМинус; Если ТабДок[Счетчик ].ОстатокДолга = 0 Тогда ТабДок.Удалить(Счетчик ); КонецЕсли; КонецЦикла; КонецПроцедуры Процедура Отчет(ТабДок, Дата, Агенты) Экспорт Макет = ВнешнийОтчетОбъект.ПолучитьМакет("Отчет"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект КАК Агент, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент КАК Контрагент, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент.Наименование КАК КонтрагентНаименование, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК Остаток, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СуммаДокумента КАК СуммаНакладной, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Номер КАК Номер, | ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности) КАК СрокОплаты, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата |ПОМЕСТИТЬ Остатки |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( | &Дата, | ДокументРасчетовСКонтрагентом ССЫЛКА Документ.РеализацияТоваровУслуг " + ?(ЗначениеЗаполнено(Агенты), " И ДокументРасчетовСКонтрагентом.Проект В ИЕРАРХИИ (&Агенты)", "") + ") КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки |Где ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток <> 0 ; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | МАКСИМУМ(ВЫБОР | КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер | ТОГДА ""Наличные"" | ИНАЧЕ ""Банк"" | КОНЕЦ) КАК ВидОплаты, | СУММА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовРасход) КАК СуммаОплаты, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом |ПОМЕСТИТЬ Обороты |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(, &Дата, Регистратор, " + ?(ЗначениеЗаполнено(Агенты), "ДокументРасчетовСКонтрагентом.Проект В ИЕРАРХИИ (&Агенты)", "") + ") КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты | |СГРУППИРОВАТЬ ПО | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДокументРасчетовСКонтрагентом |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВозвратТоваровОтПокупателяТовары.ДокументПартии, | СУММА(ВозвратТоваровОтПокупателяТовары.Сумма) КАК СуммаВозврата, | ВозвратТоваровОтПокупателяТовары.Ссылка.Дата КАК ДатаВозврата |ПОМЕСТИТЬ Возвраты |ИЗ | Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары |ГДЕ | НЕ ВозвратТоваровОтПокупателяТовары.Ссылка.ПометкаУдаления | И ВозвратТоваровОтПокупателяТовары.Ссылка.Проведен " + ?(ЗначениеЗаполнено(Агенты), " И ВозвратТоваровОтПокупателяТовары.Ссылка.Проект В ИЕРАРХИИ(&Агенты)", "") + " | |СГРУППИРОВАТЬ ПО |ВозвратТоваровОтПокупателяТовары.Ссылка.Дата, |ВозвратТоваровОтПокупателяТовары.ДокументПартии | |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | МАКСИМУМ(СчетФактураВыданный.Номер) КАК НомерСФ, | Остатки.Агент, | Остатки.ДокументРасчетовСКонтрагентом, | Остатки.Контрагент, | Остатки.КонтрагентНаименование, | СУММА(Остатки.Остаток) КАК Остаток, | Остатки.СуммаНакладной, | Остатки.Номер КАК Номер, | Остатки.СрокОплаты, | Остатки.ДокументРасчетовСКонтрагентомДата |ПОМЕСТИТЬ ОстаткиСФ |ИЗ | Остатки КАК Остатки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный КАК СчетФактураВыданный | ПО Остатки.ДокументРасчетовСКонтрагентом = СчетФактураВыданный.ДокументОснование | |СГРУППИРОВАТЬ ПО | Остатки.Номер, | Остатки.Контрагент, | Остатки.Агент, | Остатки.КонтрагентНаименование, | Остатки.СрокОплаты, | Остатки.ДокументРасчетовСКонтрагентом, | Остатки.СуммаНакладной, | Остатки.ДокументРасчетовСКонтрагентомДата |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ОстаткиСФ.Агент КАК Агент, | ОстаткиСФ.Контрагент КАК Контрагент, | ОстаткиСФ.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом, | ОстаткиСФ.Остаток - ЕСТЬNULL(Возвраты.СуммаВозврата, 0) КАК ОстатокДолга, | ОстаткиСФ.СуммаНакладной КАК СуммаНакладной, | ОстаткиСФ.Номер, | ОстаткиСФ.НомерСФ, | ОстаткиСФ.СрокОплаты, | Обороты.ВидОплаты, | Обороты.СуммаОплаты КАК СуммаОплаты, | ОстаткиСФ.ДокументРасчетовСКонтрагентомДата КАК ДокументРасчетовСКонтрагентомДата, | Возвраты.ДатаВозврата, | Возвраты.СуммаВозврата КАК СуммаВозврата |ИЗ | ОстаткиСФ КАК ОстаткиСФ | ЛЕВОЕ СОЕДИНЕНИЕ Обороты КАК Обороты | ПО ОстаткиСФ.ДокументРасчетовСКонтрагентом = Обороты.ДокументРасчетовСКонтрагентом | ЛЕВОЕ СОЕДИНЕНИЕ Возвраты КАК Возвраты | ПО ОстаткиСФ.ДокументРасчетовСКонтрагентом = Возвраты.ДокументПартии | |УПОРЯДОЧИТЬ ПО | ОстаткиСФ.Агент.Наименование, | ОстаткиСФ.КонтрагентНаименование, | ДокументРасчетовСКонтрагентомДата |ИТОГИ | СУММА(ОстатокДолга), | СУММА(СуммаНакладной), | СУММА(СуммаОплаты), | СУММА(СуммаВозврата) |ПО | ОБЩИЕ, | Агент, | Контрагент"; // ?(ЗначениеЗаполнено(Агенты), "И ДокументРасчетовСКонтрагентом.Проект В ИЕРАРХИИ (&Агенты)", "") + ") КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки Запрос.УстановитьПараметр("Дата", Дата); //Запрос.УстановитьПараметр("ДатКон", ТекущаяДата()); Запрос.УстановитьПараметр("Агенты", Агенты); Результат = Запрос.Выполнить(); ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы"); ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщиеИтоги"); ОбластьАгент = Макет.ПолучитьОбласть("Агент"); ОбластьКонтрагент = Макет.ПолучитьОбласть("Контрагент"); ОбластьДетали = Макет.ПолучитьОбласть("Детали"); ТабДок.Очистить(); ОбластьЗаголовок.Параметры.Дата = Формат(Дата, "ДФ=dd.MM.yyyy"); ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапкаТаблицы); ТабДок.НачатьАвтогруппировкуСтрок(); ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ВыборкаОбщийИтог.Следующий(); // Общий итог ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог); ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень()); ВыборкаАгент = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаАгент.Следующий() Цикл ОбластьАгент.Параметры.Заполнить(ВыборкаАгент); ТабДок.Вывести(ОбластьАгент, ВыборкаАгент.Уровень()); ВыборкаКонтрагентов = ВыборкаАгент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагентов.Следующий() Цикл ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКонтрагентов); ТабДок.Вывести(ОбластьКонтрагент, ВыборкаКонтрагентов.Уровень()); ВыборкаДокументРасчетовСКонтрагентом = ВыборкаКонтрагентов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Контр = Неопределено; Пока ВыборкаДокументРасчетовСКонтрагентом.Следующий() Цикл Если ВыборкаДокументРасчетовСКонтрагентом.СрокОплаты < ТекущаяДата() Тогда ОбластьДокументРасчетовСКонтрагентом = Макет.ПолучитьОбласть("ДокументРасчетовСКонтрагентом1"); Иначе ОбластьДокументРасчетовСКонтрагентом = Макет.ПолучитьОбласть("ДокументРасчетовСКонтрагентом"); КонецЕсли; ОбластьДокументРасчетовСКонтрагентом.Параметры.Заполнить(ВыборкаДокументРасчетовСКонтрагентом); ОбластьДокументРасчетовСКонтрагентом.Параметры.Дата = ВыборкаДокументРасчетовСКонтрагентом.ДокументРасчетовСКонтрагентомДата; ОбластьДокументРасчетовСКонтрагентом.Параметры.СуммаНакладной = ВыборкаДокументРасчетовСКонтрагентом.ДокументРасчетовСКонтрагентом.СуммаДокумента; ОбластьДокументРасчетовСКонтрагентом.Параметры.ОстатокДолга = ВыборкаДокументРасчетовСКонтрагентом.ОстатокДолга;//?(ВыборкаДокументРасчетовСКонтрагентом.Регистратор = 0, ВыборкаДокументРасчетовСКонтрагентом.Остаток, ВыборкаДокументРасчетовСКонтрагентом.Остаток / ВыборкаДокументРасчетовСКонтрагентом.Регистратор); ВыборкаДетали = ВыборкаДокументРасчетовСКонтрагентом.Выбрать(); Если ВыборкаДетали.Количество() = 0 Тогда ТабДок.Вывести(ОбластьДокументРасчетовСКонтрагентом, ВыборкаДокументРасчетовСКонтрагентом.Уровень()); ИначеЕсли ВыборкаДетали.Количество() = 1 Тогда ВыборкаДетали.Следующий(); Если ВыборкаДетали.ОстатокДолга <> 0 Тогда ОбластьДокументРасчетовСКонтрагентом.Параметры.ДатаВозврата = ВыборкаДетали.ДатаВозврата; ОбластьДокументРасчетовСКонтрагентом.Параметры.СуммаВозврата = ВыборкаДетали.СуммаВозврата; КонецЕсли; ТабДок.Вывести(ОбластьДокументРасчетовСКонтрагентом, ВыборкаДокументРасчетовСКонтрагентом.Уровень()); Иначе К = 1; Пока ВыборкаДетали.Следующий() Цикл Если К = 1 Тогда Если ЗначениеЗаполнено(ВыборкаДетали.ОстатокДолга) Тогда ОбластьДокументРасчетовСКонтрагентом.Параметры.ДатаВозврата = ВыборкаДетали.ДатаВозврата; ОбластьДокументРасчетовСКонтрагентом.Параметры.СуммаВозврата = ВыборкаДетали.СуммаВозврата; КонецЕсли; ТабДок.Вывести(ОбластьДокументРасчетовСКонтрагентом, ВыборкаДокументРасчетовСКонтрагентом.Уровень()); Иначе Если ЗначениеЗаполнено(ВыборкаДетали.ОстатокДолга) Тогда ОбластьДетали.Параметры.Заполнить(ВыборкаДетали); ТабДок.Вывести(ОбластьДетали, ВыборкаДетали.Уровень()); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; ВсегоСтрок = 1 - ТабДок.Количество(); Для СчетчикМинус = ВсегоСтрок По 0 Цикл Счетчик = - СчетчикМинус; Если ТабДок[Счетчик ].ОстатокДолга = 0 Тогда ТабДок.Удалить(Счетчик ); КонецЕсли; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.Вывести(ОбластьПодвалТаблицы); ТабДок.Вывести(ОбластьПодвал); КонецПроцедуры Процедура ПриОткрытии() Дата = ТекущаяДата(); КонецПроцедуры |
|||
1
Галахад
гуру
20.02.13
✎
10:18
|
Гм. И кто будет это читать?
|
|||
2
GANR
20.02.13
✎
10:26
|
Работу по удалению строк выполняет этот цикл
Для СчетчикМинус = ВсегоСтрок По 0 Цикл Счетчик = - СчетчикМинус; Если ТабДок[Счетчик].ОстатокДолга = 0 Тогда ТабДок.Удалить(Счетчик); КонецЕсли; КонецЦикла; Вот его и надо привести в чувства |
|||
3
Pures
20.02.13
✎
10:29
|
Там просто в ОстатокДолга не ноль а пусто.
|
|||
4
samozvanec
20.02.13
✎
10:29
|
ГДЕ
НЕ ОстатокДолга = 0 |
|||
5
Rovan
гуру
20.02.13
✎
10:30
|
(0) в запросе так:
ИМЕЮЩИЕ СУММА(СуммаДолга) = 0 |
|||
6
Галахад
гуру
20.02.13
✎
10:31
|
Так замени нулы нулями.
|
|||
7
GANR
20.02.13
✎
10:36
|
isnull(СуммаДолга, 0)
|
|||
8
Pures
20.02.13
✎
10:39
|
"isnull(СуммаДолга, 0)" это что мы делаем? Присваиваем пустым значениям нули?
|
|||
9
Pures
20.02.13
✎
10:39
|
Галахад, заменить Пустое нулями, так как я не знаю?
|
|||
10
razlagator
20.02.13
✎
10:41
|
(8) да, можно ещё ЕСТЬNULL
|
|||
11
Pures
20.02.13
✎
10:43
|
Я пробовал не канает.
|
|||
12
GANR
20.02.13
✎
10:48
|
(9) это и есть 7
|
|||
13
GANR
20.02.13
✎
10:48
|
(7)
|
|||
14
Pures
20.02.13
✎
10:51
|
(13) А что надо проверять ТабДок? Это в цикле надо делать?
|
|||
15
wartw
20.02.13
✎
10:55
|
иди в запрос,а там (7)
|
|||
16
Pures
20.02.13
✎
11:02
|
(15) А куда ее вставлять в запросе? Я просто новичок в 1с...
|
|||
17
wartw
20.02.13
✎
11:30
|
туда,где это поле получаешь "ОстатокДолга "
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |