Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 08:38

Фильтр: возможность вывода отчета по группе контрагентов

Автор Snakey, 15 фев 2013, 15:17

0 Пользователей и 1 гость просматривают эту тему.

Snakey

Есть обработка, которая выводит отчет Книги продаж. Я сделал фильтр по заданному периоду, по определенному контрагенту и использование вместе заданный период и определнного контрагента.

Хочу сделать фильтр по группе контрагентов. Не получается. Подскажите или, если не сложно, напишите...

Текст модуля обработки:

Перем ЧислоСтрок,ВерхнийКолонтитул, НижнийКолонтитул;
Перем Запрос, ТекстЗапроса, Таб;
Процедура Оживить(ДобСтрок)
   ЧислоСтрок=ЧислоСтрок+ДобСтрок;
   Состояние("В отчет выведено "+ЧислоСтрок+" строк.");
КонецПроцедуры
Процедура Сформировать()   
   ВерхнийКолонтитул = "";
   НижнийКолонтитул  = "";
   Если ДатаНачала > ДатаКонца Тогда
      Предупреждение("Неправильно задан период формирования книги продаж!
                  |Дата начала больше даты окончания периода.");
      Возврат;
   КонецЕсли;
   Таб = СоздатьОбъект("Таблица");
      Таб.ИсходнаяТаблица("Таблица2004");
   // Вывод в рублях с копейками
   Таб.ИспользоватьФормат("Ч-15.2-");
   ЧислоСтрок=0;
   Таб.ВывестиСекцию("Шапка");
   Оживить(11);
   УчПолитика = Константа.МетодОпределенияВыручки.Получить( РабочаяДата() );
   Док = СоздатьОбъект("Документ");
    Спр1 = СоздатьОбъект("Справочник.Контрагенты");
    Спр1.ВыбратьЭлементы();
   Если УчПолитика = глПоОтгрузке Тогда
      Если ВыбКонтрагент.Выбран()=1 Тогда 
      //   Если ВыбКонтрагент.ЭтоГруппа()=1 Тогда
      //         Пока Спр1.ИспользоватьРодителя(ВыбКонтрагент)=1 Цикл
      //               сообщить (Спр1);
                         Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"Контрагент",Спр1);
                  КонецЦикла;
            ИначеЕсли ВыбКонтрагент.ЭтоГруппа()=0 Тогда
                 Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"Контрагент",ВыбКонтрагент);
         КонецЕсли;   
      ИначеЕсли ВыбКонтрагент.Выбран()=0 Тогда
         Док.ВыбратьДокументы(ДатаНачала,ДатаКонца);   
      КонецЕсли;
   ИначеЕсли УчПолитика = глПоОплате Тогда
      // Если учетная политика "по оплате", в книгу продаж попадают документы,
      // дата ОПЛАТЫ которых находится в указанном периоде.
      // В общем случае, ранее выданный счет-фактура может быть оплачен
      // через любой промежуток времени. Поэтому просматривать документы
      // приходится с какой-либо условной древней даты (например, с 1990 года).
      Если ВыбКонтрагент.Выбран()=1 Тогда     
         //   Если ВыбКонтрагент.ЭтоГруппа()=1 Тогда   
         //   Пока Спр1.ПолучитьЭлемент()=1 цикл 
            //   если Спр1.ПринадлежитГруппе(ВыбКонтрагент) = 1 тогда   
                   //   Док.ВыбратьПоЗначению(ДатаНачала,ДатаКонца,"Контрагент",Спр1);
               //   Конецесли;
            //   КонецЦикла; 
      //   ИначеЕсли  ВыбКонтрагент.ЭтоГруппа()=0 Тогда
            Док.ВыбратьПоЗначению(Дата( 1990, 1, 1 ), ДатаКонца,"Контрагент",ВыбКонтрагент);      
         КонецЕсли;
      ИначеЕсли ВыбКонтрагент.Выбран()=0 Тогда                                           
            Док.ВыбратьДокументы( Дата( 1990, 1, 1 ), ДатаКонца); 
      КонецЕсли;
   КонецЕсли;                    
      ИтогВсего=0;
   ИтогСуммаБезНДС18=0;
   ИтогСуммаБезНДС10=0;
   ИтогНДС18=0;
   ИтогНДС10=0;
   ИтогНДС0=0;
   ИтогСуммаСовсемБезНДС=0;     
   Пока Док.ПолучитьДокумент() = 1 Цикл      
      Если Док.ПометкаУдаления() = 1 Тогда
         Продолжить;
      КонецЕсли;   
      Стр = Док.Вид();
      Если (Стр = "СчетФактура") или (Стр = "ЗаписьКнигиПродаж") Тогда
         Если (УчПолитика = глПоОплате)  Тогда
            Если Стр = "СчетФактура" Тогда
               //Отсекаем неоплаченные с-ф
               Если ПустоеЗначение(Док.ДатаОплатыISL) = 1 Тогда
                  Продолжить;               
               //Отсекаем оплаченные с-ф в следующем отчетном периоде
               ИначеЕсли Док.ДатаОплатыISL > ДатаКонца Тогда
                  Продолжить;               
               //Отсекаем оплаченные с-ф в предыдущем отчетном периоде
               ИначеЕсли (Док.ДатаОплатыISL < ДатаНачала) и (Док.ДатаДок < ДатаНачала) Тогда
                  Продолжить;
               КонецЕсли;
            ИначеЕсли (Стр = "ЗаписьКнигиПродаж") и ((Док.ДатаДок < ДатаНачала) или (Док.ДатаДок > ДатаКонца)) Тогда
               Продолжить;
            КонецЕсли;
         КонецЕсли;
         Если Стр = "СчетФактура" Тогда
            СуммаВсего = Док.Итог("Всего");
            НомерДата = "" + Формат(Док.ДатаДок, "Д ДДММГГГГ") + "г. №" + СокрЛП(глПреобразоватьНомерДок(Док.НомерДок, 0, 0));
         ИначеЕсли Стр="ЗаписьКнигиПродаж" Тогда
            Попытка
               СуммаВсего = Док.Итог("Всего");
            Исключение   
               СуммаВсего = Док.Всего;
            КонецПопытки;   
            НомерДата = Док.ДокументОснование;
         КонецЕсли;
         Если Док.НДСпоСтавкеНольПроцентов = 1 Тогда
            НДС0 = СуммаВсего;
            СуммаБезНДС18 = 0;
            СуммаБезНДС10 = 0;
            НДС18 = 0;
            НДС10 = 0;
            СуммаСовсемБезНДС=0;
         Иначе
            НДС0 = 0;
            СуммаБезНДС18 = 0;
            СуммаБезНДС10 = 0;
            НДС18 = 0;
            НДС10 = 0;
                Док.ВыбратьСтроки();
               Пока Док.ПолучитьСтроку()=1 Цикл
                  Если строка(док.ставкандс) = "18%" Тогда
                      СуммаБезНДС18 = СуммаБезНДС18 + Док.Сумма;
                     Ндс18         = НДС18         + Док.НДС;
                  КонецЕсли;
                  Если строка(док.ставкандс) = "10%" Тогда
                      СуммаБезНДС10 = СуммаБезНДС10 + Док.Сумма;
                     Ндс10         = НДС10         + Док.НДС;
                  КонецЕсли;
               КонецЦикла;
               ДатаОплаты = Док.ДатаОплатыISL;
         КонецЕсли;
         Таб.ВывестиСекцию("Строка");
         ИтогВсего=ИтогВсего+СуммаВсего;
         ИтогСуммаБезНДС18=ИтогСуммаБезНДС18+СуммаБезНДС18;
         ИтогСуммаБезНДС10=ИтогСуммаБезНДС10+СуммаБезНДС10;
         ИтогНДС18=ИтогНДС18+НДС18;
         ИтогНДС10=ИтогНДС10+НДС10;
         ИтогНДС0=ИтогНДС0+НДС0;
         ИтогСуммаСовсемБезНДС=ИтогСуммаСовсемБезНДС+СуммаСовсемБезНДС;
         Оживить(11);
      КонецЕсли;
   КонецЦикла;
   Таб.ВывестиСекцию("Всего");
   ГлБух = ФИО(Константа.ГлБухгалтер.Получить( ДатаКонца ));
   Таб.ВывестиСекцию("Подвал");
   Оживить(2);
   Таб.Опции(0,0,0,0, "Параметры печати книги продаж" );
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Книга продаж","");
КонецПроцедуры
Процедура ПриОткрытии(ИспНастройки)
   Если ИспНастройки=0 Тогда

      ДатаНачала=НачалоПериодаБИ();
      ДатаКонца =КонецПериодаБИ();

   КонецЕсли;
КонецПроцедуры
Процедура ВводНового() //Считывание существующей настройки
   ДатаНачала = НачалоПериодаБИ();
   ДатаКонца = КонецПериодаБИ();
КонецПроцедуры


Yura063

Помогли, отблагодари!

Snakey

Слабо дружу с запросами. Понимаю, что это основополагающая штука...

Yura063

Так попробуйте конструктор! Сделайте запрос для его проверки есть хорошая обработка для управляемого приложения ConsSel_Managed_Plus, для толстого не управляемого RequestConsoleManaged. Они выводят результат запроса!
Помогли, отблагодари!

Dethmontt

Цитата: Yura063 от 15 фев 2013, 16:25Так попробуйте конструктор! Сделайте запрос для его проверки есть хорошая обработка для управляемого приложения ConsSel_Managed_Plus, для толстого не управляемого RequestConsoleManaged. Они выводят результат запроса!
Думаю у него не получиться это сделать в 1С 7.7 =)
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Yura063

Помогли, отблагодари!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск