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

Как отобрать переменную из документа с учетом отбора в отчете

Автор EvgenyRus, 24 мая 2017, 09:07

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

EvgenyRus

Добрый день! Помогите доработать отчет. Есть переменная КколДней в документах ОбщийПутевойЛистВодителя. Нужно сделать в отчете так, чтоб переменная выводилась в отчете, только тех документов которые были отобраны по Водителю (Если Таб.ФИО<>Водитель Тогда). Сейчас эта переменная выводится из документов в диапазоне дат без учета отбора. Подскажите как доработать отчет?   
Код:
Процедура Сформировать()
   Таб = СоздатьОбъект("ТаблицаЗначений");
   
   Таб.НоваяКолонка("ФИО","Справочник.Сотрудники");
   Таб.НоваяКолонка("ОтработаноЧасов","Число");      
   
   Док=Создатьобъект("Документ.ОбщийПутевойЛистВодителя");
   Док.УстановитьФильтр(0,1);
    Док.ВыбратьДокументы(НачДата,КонДата);
   
   Пока Док.ПолучитьДокумент()=1 Цикл
      
      Док.ВыбратьСтроки();
      Пока Док.ПолучитьСтроку()=1 Цикл 
            Таб.НоваяСтрока();
          Таб.ФИО=Док.Водитель;
          Таб.ОтработаноЧасов=Док.ОтработаноЧасов;
                           
      КонецЦикла; 

         КколДней=КколДней+Док.КколДней;   
   КонецЦикла;   
    
   //сворачиваем     
 
          Стр="";   
            Стр=Стр+"ФИО,";
        
   Таб.Свернуть(Стр, "ОтработаноЧасов");

    //начинаем вывод на печать
   Т=СоздатьОбъект("Таблица");
   Т.ВывестиСекцию("Шапка");

   Таб.ВыбратьСтроки();
   Пока Таб.ПолучитьСтроку()=1 Цикл
            
             Если ПустоеЗначение(Водитель)=0 Тогда
          Если Таб.ФИО<>Водитель Тогда   
                   
                Продолжить;
          КонецЕсли;
   КонецЕсли;
       
      Т.ВывестиСекцию("Инфо");
   
    КонецЦикла;
   Т.Опции(0,0);
   Т.Показать("Отчет по путевым листам");
    КонецПроцедуры

wise

Цитата: EvgenyRus от 24 мая 2017, 09:07Пока Док.ПолучитьДокумент()=1 Цикл

после ЭТОЙ строки ВСТАВЬ: {
Если Док.Водитель <> Водитель Тогда
    Продолжить;
КонецЕсли;
}
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

EvgenyRus

БЛАГОДАРЮ! Все получилось )
Добавлено: 24 мая 2017, 11:30


Я дико извеняюсь, но подскажите почему не работает код, когда я подставляю вместо водителя отбор по подразделению? Данные в печ форму не выводятся.
Код:
//*******************************************
Процедура Сформировать()
   Таб = СоздатьОбъект("ТаблицаЗначений");
   

   Таб.НоваяКолонка("ОтработаноЧасов","Число");      
   Таб.НоваяКолонка("Подразделение","Справочник.Подразделения");
   
   Док=Создатьобъект("Документ.ОбщийПутевойЛистВодителя");
   Док.УстановитьФильтр(0,1);
    Док.ВыбратьДокументы(НачДата,КонДата);
   
   Пока Док.ПолучитьДокумент()=1 Цикл     
      
      Если ПустоеЗначение(Подразделение)=0 Тогда
          Если Док.Подразделение<>Подразделение Тогда
              Продолжить;
          КонецЕсли;
      КонецЕсли;
                
      Док.ВыбратьСтроки();
      Пока Док.ПолучитьСтроку()=1 Цикл 
            Таб.НоваяСтрока();
         
          Таб.ОтработаноЧасов=Док.ОтработаноЧасов;
         Таб.Подразделение=Док.Подразделение;                  
      КонецЦикла; 

         КколДней=КколДней+Док.КколДней;   
   КонецЦикла;   
    
   //сворачиваем     
 
          Стр="";   
            
            Стр=Стр+"Подразделение,";
        
   Таб.Свернуть(Стр, "ОтработаноЧасов");

    //начинаем вывод на печать
   Т=СоздатьОбъект("Таблица");
   Т.ВывестиСекцию("Шапка");

   
   Таб.ВыбратьСтроки();
   Пока Таб.ПолучитьСтроку()=1 Цикл
            


       
      Т.ВывестиСекцию("Инфо");
   
    КонецЦикла;


   Т.Опции(0,0);
   
   Т.Показать("Отчет по путевым листам");
   
КонецПроцедуры

Добавлено: 24 мая 2017, 12:59


Все разобрался. Водитель был в шапке формы, а подразделение в табличной части. Вставил во внутренний цикл перебор строк и все вышло. Спасибо!
  Пока Док.ПолучитьДокумент()=1 Цикл     
                           
      Док.ВыбратьСтроки();
      Пока Док.ПолучитьСтроку()=1 Цикл 
            Таб.НоваяСтрока();
           Если ПустоеЗначение(Подразделение)=0 Тогда
          Если Док.Подразделение<>Подразделение Тогда
              Продолжить;
          КонецЕсли;
      КонецЕсли;
          Таб.ОтработаноЧасов=Док.ОтработаноЧасов;
         Таб.Подразделение=Док.Подразделение;                 
      КонецЦикла; 

         КколДней=КколДней+Док.КколДней;   
   КонецЦикла;   
Добавлено: 24 мая 2017, 13:11


Эх рано радовался, при таком построении кода перестает правильно отображать переменную КколДней, получается не понимает отбор в табличной части документа. Как правильно организовать отбор не только по данным в шапке документа, но и по его табличной части?

Теги:

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

Рейтинг@Mail.ru

Поиск