Имя: Пароль:
1C
1С v8
Как убрать из отчета строки с нулевым остатком долга?
,
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
туда,где это поле получаешь "ОстатокДолга "