Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
16 Июн 2021, 16:58
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
МультиВход
 
collapse

Автор Тема: Как отобрать переменную из документа с учетом отбора в отчете  (Прочитано 1124 раз)

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

Оффлайн EvgenyRus

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

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

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


Оффлайн wise

  • *****
  • Регистрация: 2013-03-21
  • Сообщений: 1067
  • РЕПУТАЦИЯ: 155
  • КПД: 15%
  • Кто сгорел, того не подожжешь
  • Профессия: Ученик 1С
Пока Док.ПолучитьДокумент()=1 Цикл

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

Оффлайн EvgenyRus

  • *
  • Регистрация: 2017-05-24
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Профессия: Программист 1С
БЛАГОДАРЮ! Все получилось )
Добавлено: 24 Мая 2017, 11:30

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

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

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

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


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


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

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

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

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

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

Последний раз редактировалось: EvgenyRus; 24 Мая 2017, 13:11. Причина: Объединение сообщений


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Последние вакансии

* Том 10 авторов за месяц

LexaK
68 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
68 Сообщений
antoneus antoneus
33 Сообщений
Ивашка
27 Сообщений
neek666
26 Сообщений
KATERINA 861
19 Сообщений
Алексей_1985_06
15 Сообщений
SSC
15 Сообщений
alexandr_ll
14 Сообщений
pouyo
8 Сообщений

* Кто онлайн

  • Точка Гостей: 605
  • Точка Скрытых: 0
  • Точка Пользователей: 5
  • Точка Сейчас на форуме:

* Облако тэгов

* Инструменты

* Дополнительно

Поиск