Наличие оборота у контрагента

Новая тема
"Уважаемые Дамы и Господа!
Есть вот такая обработка, как правильно использовать ДО или КО чтобы выводились только те контрагенты, у которых есть оборот по 60, 62 и 76 счёту?
Заранее спасибо!


Процедура Сформировать()
   ОчиститьОкноСообщений();
   БИ = СоздатьОбъект ("БухгалтерскиеИтоги");
   Спр = СоздатьОбъект ("Справочник.Контрагенты");
   Таб = СоздатьОбъект("Таблица");      
   БИ.Рассчитать (НачДата,КонДата,"60,62,76");
   Таб.ИсходнаяТаблица("Таблица");
   Таб.ВывестиСекцию("Шапка");
   Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
   Спр.ВыбратьЭлементы();
   БИ.ИспользоватьРазделительУчета(РазделительУчета);
   Пока Спр.ПолучитьЭлемент() = 1 Цикл
   Если Спр.ЭтоГруппа() = 1 Тогда
   Продолжить;
   КонецЕсли;
   КодКонтрагента = Спр.Код;
   Состояние("Обрабатывается элемент: " + Спр.Наименование);
   С60КК = БИ.СКК ("60",,,Спр.ТекущийЭлемент());
   С60КД = БИ.СКД ("60",,,Спр.ТекущийЭлемент());
   С60КК = С60КД - С60КК;
   С62КК = БИ.СКК ("62",,,Спр.ТекущийЭлемент());
   С62КД = БИ.СКД ("62",,,Спр.ТекущийЭлемент());
   С62КК = С62КД - С62КК;
   С76КК = БИ.СКК ("76",,,Спр.ТекущийЭлемент());
   С76КД = БИ.СКД ("76",,,Спр.ТекущийЭлемент());
   С76КК = С76КД - С76КК;
   Таб.ВывестиСекцию("Строка_1");
   КонецЦикла;
   Таб.Показать("Таблица", """");
КонецПроцедуры
"
Код "кривоват". Я бы порекомендовал воспользоваться бухгалтерским запросом. В конфигураторе есть конструктор бух.запроса.
Согласен, кривоват, это моя первая обработка...

А нельзя как-то вставить эелемент выборки по наличию оборота?
"....
С60КК = БИ.СКК ("60",,,Спр.ТекущийЭлемент());
С60КД = БИ.СКД ("60",,,Спр.ТекущийЭлемент());
С60КК = С60КД - С60КК;
С60КО = БИ.КО ("60",,,Спр.ТекущийЭлемент());
С60ДО = БИ.ДО ("60",,,Спр.ТекущийЭлемент());
....
Если (С60КО<>0) ИЛИ (С60ДО<>0) тогда
//попадут в условие только имеющие оборот
Таб.ВывестиСекцию("Строка_1");
.....
КонецЕсли;

про 62 и 76 аналогично. Добавить их в условие выше.

кстати:
>БИ.Рассчитать (НачДата,КонДата,"60,62,76");
>   Таб.ИсходнаяТаблица("Таблица");
>   Таб.ВывестиСекцию("Шапка");
>   Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
>   Спр.ВыбратьЭлементы();
>   БИ.ИспользоватьРазделительУчета(РазделительУчета);
лучше так:
БИ.ИспользоватьРазделительУчета(РазделительУчета);
БИ.Рассчитать (НачДата,КонДата,"60,62,76");
  Таб.ИсходнаяТаблица("Таблица");
  Таб.ВывестиСекцию("Шапка");
  Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
  Спр.ВыбратьЭлементы();


"
Спасибо огромное! Вы очень помогли!

А обработка выполняется долго из-за кривоватого кода?
"мой вариант:
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Сч60=СчетПоКоду("60");
Сч62=СчетПоКоду("62");
Сч76=СчетПоКоду("76");
БИ=СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты);
БИ.ВыполнитьЗапрос(НачДата,КонДата,"60,62,76");
БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1)=1 Цикл
  Если (БИ.ДО()<>0) ИЛИ (БИ.КО()<>0) Тогда
     Таб.ВывестиСекцию("Строка");
  КонецЕсли;
КонецЦикла;

Таб.Опции(0,0,0,0);
Таб.Показать("Таблица", """");

и в таблице в ячейках секции "Строка" пишем формулы:
БИ.СНД(Сч60);
БИ.ДО(Сч60);
БИ.КО(Сч60);
БИ.СКД(Сч60);
..."
"> А обработка выполняется долго из-за кривоватого кода?
Да, там же перебирается весь справочник контрагентов, а при использовании бух.запроса будут только те контрагенты, которые присутствуют в оборотках.
Выше написан код с бух.запросом, но забыто упоминанание про РАЗДЕЛИТЕЛЬ УЧЕТА ;-)"
Читают тему
(гостей: 1)

Быстрый переход