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

Нужна помощь с отчетом (ПУБ 7.7)

Автор Pilot741, 27 апр 2012, 13:44

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

Pilot741

Добрый день, всем!

У меня есть отчет, в котором выбираются все документы списние денежных средств по выбранному Подразделению или Контрагенту.
Сейчас стало нужно чтобы в этот отчет попадал еще один документ: «Перенос ден.средств (расчеты)».

См. приложенные рисунки.

В документе «Перенос ден.средств (расчеты)» реквизиты в группе Контрагенты (обведено на рисунке красным): Контрагент и Договор имеют «неопределенный тип»
В зависимости от того, какой выбран счет (реквизит документа «На основании ...» Подчеркнут красным), выбираются реквизиты группы Контрагенты. Проще говоря это значения субконто для выбранного счета.

Если счет не выбран, то по умолчанию подразумевается счет 60. т.е. субконто1 – Контрагенты, субконто2 – договоры.

Мне нужно чтобы документ «перенос ден.средств(расчеты)» попадал в мой отчет. Но у меня не выходит. Не могу сообразить, как сделать так чтобы в отчет попадали данные из этого документа. 
Помогите, пожалуйста!


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

    // Выводим заголовок "ПОДРАЗДЕЛЕНИЯ", если идет отбор по Подразделению.
    Если ВыбПодразделение.Выбран()=1 Тогда
   
// --------------------------------------------------------- 
     // Заголовок=Заголовок+"По подразделению:"+ВыбПодразделение;
        Заголовок=Заголовок+"По подразделению:"+" "+ВыбПодразделение;

    // Выводим заголовок "КОНТРАГЕНТА", если идет отбор по Контрагенту.
ИначеЕсли ВыбКонтрагент.Выбран()=1 Тогда
Заголовок=Заголовок+"По контрагенту:"+" "+ВыбКонтрагент;
КонецЕсли;

    // Выводим заголовок "ПОДРАЗДЕЛЕНИЯ и КОНТРАГЕНТА", если идет отбор по Подразделению и Контрагенту.
Если (ВыбПодразделение.Выбран()=1) и (ВыбКонтрагент.Выбран()=1) тогда
    Заголовок=Заголовок+" "+" "+" "+" "+" "+"По контрагенту:"+" "+ВыбКонтрагент;
КонецЕсли;

// ----------------------------------------------------

//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Контрагент =Документ.СписаниеДенежныхСредствРасчеты.Контрагент;
|ДатаДок = Документ.СписаниеДенежныхСредствРасчеты.ДатаДок;
|Сумма = Документ.СписаниеДенежныхСредствРасчеты.Сумма;
|ПП = Документ.СписаниеДенежныхСредствРасчеты.ТекущийДокумент;
|НазначениеПлатежа = Документ.СписаниеДенежныхСредствРасчеты.НазначениеПлатежа;
|Договор = Документ.СписаниеДенежныхСредствРасчеты.Договор;
    |Подразделение = Документ.СписаниеДенежныхСредствРасчеты.Договор.Подразделение;
|Функция СуммаСумма = Сумма(Сумма);
|Группировка Контрагент без групп; 
|Группировка ПП  без групп;
    |";


    // Выводим информацию по выбранному Подразделению.
Если ВыбПодразделение.Выбран()=1 Тогда
ТекстЗапроса =  ТекстЗапроса+
"Условие(Подразделение = ВыбПодразделение);
|"//}}ЗАПРОС
;   
// ---------------------------------------------------------
    // Выводим информацию по выбранному Контрагенту.
    ИначеЕсли ВыбКонтрагент.Выбран()=1 Тогда
ТекстЗапроса =  ТекстЗапроса+
"Условие(Контрагент = ВыбКонтрагент);
|"//}}ЗАПРОС
;
    КонецЕсли;

    // Выводим информацию по выбранным Подразделению и Контрагенту.
    Если (ВыбПодразделение.Выбран()=1) и (ВыбКонтрагент.Выбран()=1) тогда
ТекстЗапроса =  ТекстЗапроса+
"Условие(Подразделение = ВыбПодразделение);
|"//}}ЗАПРОС
"Условие(Контрагент = ВыбКонтрагент);
|"//}}ЗАПРОС
        ;   
// ---------------------------------------------------

    КонецЕсли;

// Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);

Если ВыбКонтрагент.Выбран()=1 Тогда
Пока Запрос.Группировка(1) = 1 Цикл 
Пока Запрос.Группировка(2) = 1 Цикл
Таб.ВывестиСекцию("Контрагент");
КонецЦикла;
    КонецЦикла;
Иначе
Пока Запрос.Группировка(1) = 1 Цикл
Таб.ВывестиСекцию("Посумме");
  Пока Запрос.Группировка(2) = 1 Цикл
   Таб.ВывестиСекцию("Контрагент");
  КонецЦикла;
    КонецЦикла;
КонецЕсли;

// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры



дфтын

Если вы знакомы с программированием то все просто! добавьте вид документа в запрос! (там где создание объекта типа Запрос)
А если нет, то объяснить сложно, обращайтесь - сделаем

Pilot741

Цитата: дфтын от 29 апр 2012, 20:41
Если вы знакомы с программированием то все просто! добавьте вид документа в запрос! (там где создание объекта типа Запрос)
А если нет, то объяснить сложно, обращайтесь - сделаем

Добавить документ в запрос проще простого.
не работает при выборе подразделения.
Из Перенос д.с не могу вытянуть по договору подразделение, к которому он относится. так.как тип стоит "неопределенный"

Pilot741

я все еще надуюсь на помощь.
вот что получилось наковырять:

----------
Перем Запрос, ТекстЗапроса, Таб, Справочник, Договор;
//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
   ПериодДляШапкиОтчета = ПериодСтр(ВыбНачПериода, ВыбКонПериода);
    Заголовок="";

    // Выводим заголовок "ПОДРАЗДЕЛЕНИЯ", если идет отбор по Подразделению.
    Если ВыбПодразделение.Выбран()=1 Тогда
   
     // Заголовок=Заголовок+"По подразделению:"+ВыбПодразделение;
        Заголовок=Заголовок+"По подразделению:"+" "+ВыбПодразделение;

    // Выводим заголовок "КОНТРАГЕНТА", если идет отбор по Контрагенту.      
   ИначеЕсли ВыбКонтрагент.Выбран()=1 Тогда
       Заголовок=Заголовок+"По контрагенту:"+" "+ВыбКонтрагент;
   КонецЕсли;   

    // Выводим заголовок "ПОДРАЗДЕЛЕНИЯ и КОНТРАГЕНТА", если идет отбор по Подразделению и Контрагенту.         
   Если (ВыбПодразделение.Выбран()=1) и (ВыбКонтрагент.Выбран()=1) тогда   
       Заголовок=Заголовок+" "+" "+" "+" "+" "+"По контрагенту:"+" "+ВыбКонтрагент;   
   КонецЕсли;


   
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Контрагент = Документ.АвансыТорговогоДома.СубКонтоКред1,Документ.СписаниеДенежныхСредствРасчеты.Контрагент;
   |ДатаДок = Документ.СписаниеДенежныхСредствРасчеты.ДатаДок,Документ.АвансыТорговогоДома.ДатаДок;
   |Сумма = Документ.СписаниеДенежныхСредствРасчеты.Сумма,Документ.АвансыТорговогоДома.Сумма;
   |ПП = Документ.СписаниеДенежныхСредствРасчеты.ТекущийДокумент,Документ.АвансыТорговогоДома.ТекущийДокумент;
   |НазначениеПлатежа = Документ.СписаниеДенежныхСредствРасчеты.НазначениеПлатежа,Документ.АвансыТорговогоДома.НазначениеПлатежа;
   |Функция СуммаСумма = Сумма(Сумма);
   |Группировка Контрагент без групп; 
   |Группировка ПП  без групп;
    |";

   
   // Если ошибка в запросе, то выход из процедуры
      Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
      Возврат;
   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);

Если ВыбКонтрагент.Выбран()=1 Тогда
   Пока Запрос.Группировка(1) = 1 Цикл 
    Пока Запрос.Группировка(2) = 1 Цикл
       Если (ТипЗначенияСтр(Запрос.Контрагент)="Справочник") Тогда //Проверили что тип - справочник
          Если (Запрос.Контрагент.Вид()="Контрагенты") И (Запрос.Контрагент=ВыбКонтрагент) Тогда  //Проверили что это точно Контрагенты и что выбранный
             Если ВыбПодразделение.Выбран()=1 Тогда //Если еще выбрано подразделение то также проверяем тип документа, что точно справочник, и что соответствует выбору
                
                Если Запрос.ПП.Вид()="СписаниеДенежныхСредствРасчеты" Тогда
                   Если Запрос.ПП.Договор.Подразделение=ВыбПодразделение Тогда
                       дог= Запрос.ПП.Договор;
                      подр = Запрос.ПП.Договор.Подразделение;
                      Таб.ВывестиСекцию("Контрагент");
                   КонецЕсли;             
                КонецЕсли;
                
                Если Запрос.ПП.Вид()="АвансыТорговогоДома" Тогда
                   Если ТипЗначенияСтр(Запрос.ПП.СубКонтоКред2)="Справочник" Тогда
                      Если Запрос.ПП.СубКонтоКред2.Вид()="Договора" Тогда
                         Если Запрос.ПП.СубКонтоКред2.Договор.Подразделение=ВыбПодразделение Тогда
                             подр = Запрос.ПП.СубКонтоКред2.Договор.Подразделение;
                             дог= Запрос.ПП.СубКонтоКред2.Договор;
                             Таб.ВывестиСекцию("Контрагент");
                         КонецЕсли;                      
                      КонецЕсли;
                   КонецЕсли;
                КонецЕсли;
             Иначе
                Таб.ВывестиСекцию("Контрагент");
             КонецЕсли;
          КонецЕсли;
       КонецЕсли;
    КонецЦикла;
КонецЦикла;

Иначе
   Пока Запрос.Группировка(1) = 1 Цикл
    Таб.ВывестиСекцию("Посумме");       
     Пока Запрос.Группировка(2) = 1 Цикл
      Таб.ВывестиСекцию("Контрагент");
     КонецЦикла;
    КонецЦикла;
КонецЕсли;       

   // Заполнение полей "Итого"
   Таб.ВывестиСекцию("Итого");
   // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать", "");
КонецПроцедуры

----------

теперь
если выбрать только Контрагента - выводится вообще все документы по все контрагентам.
если выбрать Контрагента и Подразделение, то выводится только документ Списание д.с. (но по данному контрагенту и подразделению)
если выбрать только Подразделение - выводится и Списание и Перенос д.с. по этим подразделению и контрагенту, но в таблице в колонке Подр-е и Дог-р ничего не выводит(

Теги:

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

Рейтинг@Mail.ru

Поиск