Наличие оборота у контрагента
21.01.2009
14:55
#1
"Уважаемые Дамы и Господа!
Есть вот такая обработка, как правильно использовать ДО или КО чтобы выводились только те контрагенты, у которых есть оборот по 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, 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");
КонецЦикла;
Таб.Показать("Таблица", """");
КонецПроцедуры
"
21.01.2009
15:10
#2
Код "кривоват". Я бы порекомендовал воспользоваться бухгалтерским запросом. В конфигураторе есть конструктор бух.запроса.
21.01.2009
15:12
#3
Согласен, кривоват, это моя первая обработка...
А нельзя как-то вставить эелемент выборки по наличию оборота?
А нельзя как-то вставить эелемент выборки по наличию оборота?
21.01.2009
15:22
#4
"....
С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",,,Спр.ТекущийЭлемент());
С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);
Спр.ВыбратьЭлементы();
"
21.01.2009
15:43
#5
Спасибо огромное! Вы очень помогли!
А обработка выполняется долго из-за кривоватого кода?
А обработка выполняется долго из-за кривоватого кода?
21.01.2009
15:59
#6
"мой вариант:
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Сч60=СчетПоКоду("60");
Сч62=СчетПоКоду("62");
Сч76=СчетПоКоду("76");
БИ=СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты);
БИ.ВыполнитьЗапрос(НачДата,КонДата,"60,62,76");
БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1)=1 Цикл
Если (БИ.ДО()<>0) ИЛИ (БИ.КО()<>0) Тогда
Таб.ВывестиСекцию("Строка");
КонецЕсли;
КонецЦикла;
Таб.Опции(0,0,0,0);
Таб.Показать("Таблица", """");
и в таблице в ячейках секции "Строка" пишем формулы:
БИ.СНД(Сч60);
БИ.ДО(Сч60);
БИ.КО(Сч60);
БИ.СКД(Сч60);
..."
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Сч60=СчетПоКоду("60");
Сч62=СчетПоКоду("62");
Сч76=СчетПоКоду("76");
БИ=СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты);
БИ.ВыполнитьЗапрос(НачДата,КонДата,"60,62,76");
БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1)=1 Цикл
Если (БИ.ДО()<>0) ИЛИ (БИ.КО()<>0) Тогда
Таб.ВывестиСекцию("Строка");
КонецЕсли;
КонецЦикла;
Таб.Опции(0,0,0,0);
Таб.Показать("Таблица", """");
и в таблице в ячейках секции "Строка" пишем формулы:
БИ.СНД(Сч60);
БИ.ДО(Сч60);
БИ.КО(Сч60);
БИ.СКД(Сч60);
..."
21.01.2009
16:13
#7
"> А обработка выполняется долго из-за кривоватого кода?
Да, там же перебирается весь справочник контрагентов, а при использовании бух.запроса будут только те контрагенты, которые присутствуют в оборотках.
Выше написан код с бух.запросом, но забыто упоминанание про РАЗДЕЛИТЕЛЬ УЧЕТА ;-)"
Да, там же перебирается весь справочник контрагентов, а при использовании бух.запроса будут только те контрагенты, которые присутствуют в оборотках.
Выше написан код с бух.запросом, но забыто упоминанание про РАЗДЕЛИТЕЛЬ УЧЕТА ;-)"
Читают тему
(гостей: 1)