Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 6, свеженьких 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> Вывод массива табличных документов на печать          
rpervak Подменю пользователя
сообщение 29.12.15, 14:43
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 72
Спасибо сказали: 2 раз
Рейтинг: 0

Здравствуйте !
1С:Предприятие 8.2 (8.2.19.121)
УПП (1.3.39.1)

У меня есть отчет, в котором выводятся данные в табличный документ, указав параметр "Договор"
Я сделал выборку по договорам запросом и перебираю результат циклом. При этом при n договоров формируется n табличных документов.
Как сделать, что-бы n табличных документов выводились в один макет ?
Спасибо.

sava1 Подменю пользователя
сообщение 29.12.15, 15:03
Сообщение #2

Крутой
Иконка группы
Группа: Местный
Сообщений: 1760
Из: Проскуров
Спасибо сказали: 415 раз
Рейтинг: 408.7

Показать людям код.

rpervak Подменю пользователя
сообщение 29.12.15, 16:11
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 72
Спасибо сказали: 2 раз
Рейтинг: 0

Процедура КнопкаСформироватьНажатие(Кнопка)
    
    ЗапросНачало = Новый Запрос;
    ЗапросНачало.Текст =
    "ВЫБРАТЬ
    |    ДоговорыКонтрагентов.Владелец КАК Контрагент,
    |    ДоговорыКонтрагентов.Ссылка КАК Договор,
    |    ДоговорыКонтрагентов.ВалютаВзаиморасчетов КАК Валюта
    |ИЗ
    |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |ГДЕ
    |    ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ
    |    И ДоговорыКонтрагентов.ВалютаВзаиморасчетов <> &Валюта
    |
    |УПОРЯДОЧИТЬ ПО
    |    Контрагент";
    
    ЗапросНачало.УстановитьПараметр("Валюта", Справочники.Валюты.НайтиПоКоду(980));
    РезультатНачало = ЗапросНачало.Выполнить();

    ТЗНачало = РезультатНачало.Выгрузить();
    
Для Каждого СтрНачало Из ТЗНачало Цикл
        
    Контрагент = СтрНачало.Контрагент;
    Договор = СтрНачало.Договор;
    //Сообщить("" + Контрагент + Договор);
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
        |    СУММА(ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход) КАК СуммаВзаиморасчетовПриход,
        |    СУММА(ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовРасход) КАК СуммаВзаиморасчетовРасход,
        |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата КАК ДатаДокумента,
        |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.НомерВходящегоДокумента КАК НомерВМД
        |ИЗ
        |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
        |            ,
        |            ,
        |            Регистратор,
        |            Контрагент = &Контрагент
        |                И ДоговорКонтрагента = &ДоговорКонтрагента) КАК ВзаиморасчетыСКонтрагентамиОбороты
        |ГДЕ
        |    ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход <> ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовРасход
        |
        |СГРУППИРОВАТЬ ПО
        |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
        |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата,
        |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.НомерВходящегоДокумента
        |
        |УПОРЯДОЧИТЬ ПО
        |    ДатаДокумента";

    Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор);
    Запрос.УстановитьПараметр("Контрагент",         Контрагент);

    Результат = Запрос.Выполнить();

    ТЗ = Результат.Выгрузить();
    
    НайденныеСтроки = ТЗ.НайтиСтроки(Новый Структура("СуммаВзаиморасчетовРасход",0));
    
    Для Каждого Стр Из НайденныеСтроки Цикл
        ТЗ.Удалить(Стр);
    КонецЦикла;
    
    ТЗ.Сортировать("ДатаДокумента");
    
    ТабДок = Новый ТабличныйДокумент;
    Макет  = ПолучитьМакет("Макет");
    
    ОбластьШапка              = Макет.ПолучитьОбласть("Шапка");
    ОбластьОплата             = Макет.ПолучитьОбласть("Оплата");
    ОбластьПоступление        = Макет.ПолучитьОбласть("Отгрузка");
    ОбластьПоступлениеКрасная = Макет.ПолучитьОбласть("ОтгрузкаКрасная");
    
    ОбластьДолг               = Макет.ПолучитьОбласть("Долг");
    ОбластьДолгПоДокументу    = Макет.ПолучитьОбласть("ДолгПоДокументу");
    
    ОбластьДолгПоПоступлению  = Макет.ПолучитьОбласть("ДолгПоПоступлению");
    
    ОбластьШапка.Параметры.Контрагент = Контрагент;
    ОбластьШапка.Параметры.Договор = Договор;
    ОбластьШапка.Параметры.Валюта =  Договор.ВалютаВзаиморасчетов;
    
    ТабДок.Вывести(ОбластьШапка);    
    
    // СЕКЦИЯ ДОЛГ
    Фильтр = Новый Структура("Контрагент,ДоговорКонтрагента", Контрагент, Договор);
    ДолгНаНачало = РегистрыНакопления.ВзаиморасчетыСКонтрагентами.Остатки(НачПериода, Фильтр, "Контрагент,ДоговорКонтрагента", "СуммаВзаиморасчетов");
    
    ОбластьДолг.Параметры.ТекстСальдо = "Сальдо на початок періоду:";
    ОбластьДолг.Параметры.Долг        = ДолгНаНачало.Итог("СуммаВзаиморасчетов");
    ТабДок.Вывести(ОбластьДолг);    
    
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        Если Выборка.СуммаВзаиморасчетовПриход = 0 Тогда
            Продолжить;
        КонецЕсли;
        
        Если Выборка.СуммаВзаиморасчетовПриход = Выборка.СуммаВзаиморасчетовРасход Тогда
            Продолжить;
        КонецЕсли;
        
        ДатаОплаты         = НачалоДня(Выборка.ДатаДокумента);
        ГраницаПоступления = ДатаОплаты + (ОтсрочкаПоставкиДней - 1) * 24 * 60 * 60;
        
        СумаОплаты = Выборка.СуммаВзаиморасчетовПриход;
        
        ОбластьОплата.Параметры.ДокОплаты          = Выборка.Регистратор;
        ОбластьОплата.Параметры.СумаОплаты         = СумаОплаты;
        ОбластьОплата.Параметры.ГраницаПоступления = ГраницаПоступления;
        
        Если ДатаОплаты >= НачалоДня(НачПериода) И ДатаОплаты <= КонецДня(КонПериода) Тогда
            ТабДок.Вывести(ОбластьОплата);            
        КонецЕсли;
        
        Для Каждого Стр Из ТЗ Цикл
            
            Если Стр.СуммаВзаиморасчетовРасход = 0 Тогда
                Продолжить;
            КонецЕсли;
            
            Если СумаОплаты <= 0 Тогда
                Прервать;
            КонецЕсли;
            
            СумаПоступления = Мин(Стр.СуммаВзаиморасчетовРасход, СумаОплаты);
            
            ОбластьВывода = ?(НачалоДня(Стр.ДатаДокумента) > ГраницаПоступления, ОбластьПоступлениеКрасная, ОбластьПоступление);
            
            ОбластьВывода.Параметры.ГраницаПоставки = ГраницаПоступления;
            ОбластьВывода.Параметры.СумаПоступления = СумаПоступления;
            ОбластьВывода.Параметры.ДокПоступления  = Стр.Регистратор;
            ОбластьВывода.Параметры.НомерВМД        = Стр.НомерВМД;
            
            ДатаРеализации = Стр.Регистратор.Дата;
            
            Если ДатаРеализации >= НачалоДня(НачПериода) И ДатаРеализации <= КонецДня(КонПериода) Тогда
                ТабДок.Вывести(ОбластьВывода);    
            КонецЕсли;
            
            Стр.СуммаВзаиморасчетовРасход = Стр.СуммаВзаиморасчетовРасход - СумаПоступления;
            
            СумаОплаты = СумаОплаты - СумаПоступления;
            
        КонецЦикла;
        
        Если СумаОплаты > 0 Тогда
            
            ОбластьДолгПоДокументу.Параметры.ДокОплаты  = Выборка.Регистратор;
            ОбластьДолгПоДокументу.Параметры.СуммаДолга = СумаОплаты;
            //ОбластьДолгПоДокументу.Параметры.НомерВМД   = Выборка.НомерВМД;
            
            ТабДок.Вывести(ОбластьДолгПоДокументу);    
            
        КонецЕсли;
        
        НайденныеСтроки = ТЗ.НайтиСтроки(Новый Структура("СуммаВзаиморасчетовРасход",0));
        
        Для Каждого Стр Из НайденныеСтроки Цикл
            ТЗ.Удалить(Стр);
        КонецЦикла;
        
        ТЗ.Сортировать("ДатаДокумента");
        
    КонецЦикла;
    
    // СЕКЦИЯ ПОСТУПЛЕНИЯ БЕЗ ОПЛАТЫ
    Для Каждого Стр Из ТЗ Цикл
        
        Если Стр.СуммаВзаиморасчетовРасход = 0 Тогда
            Продолжить;
        КонецЕсли;
                
        СумаПоступления = Стр.СуммаВзаиморасчетовРасход;
        
        ОбластьДолгПоПоступлению.Параметры.СумаПоступления = СумаПоступления;
        ОбластьДолгПоПоступлению.Параметры.ДокПоступления  = Стр.Регистратор;
        ОбластьДолгПоПоступлению.Параметры.НомерВМД        = Стр.НомерВМД;
        
        ДатаРеализации = Стр.Регистратор.Дата;
        
        Если ДатаРеализации >= НачалоДня(НачПериода) И ДатаРеализации <= КонецДня(КонПериода) Тогда
            ТабДок.Вывести(ОбластьДолгПоПоступлению);    
        КонецЕсли;
        
        Стр.СуммаВзаиморасчетовРасход = Стр.СуммаВзаиморасчетовРасход - СумаПоступления;
        
    КонецЦикла;

    // СЕКЦИЯ ДОЛГ
    ДолгНаНачало = РегистрыНакопления.ВзаиморасчетыСКонтрагентами.Остатки(КонецДня(КонПериода), Фильтр, "Контрагент,ДоговорКонтрагента", "СуммаВзаиморасчетов");
    
    ОбластьДолг.Параметры.ТекстСальдо = "Сальдо на кінець періоду:";
    ОбластьДолг.Параметры.Долг        = ДолгНаНачало.Итог("СуммаВзаиморасчетов");
    ТабДок.Вывести(ОбластьДолг);    
    
    ТабДок.ТолькоПросмотр = Истина;        
    ТабДок.Показать();    
КонецЦикла;
    
КонецПроцедуры

sava1 Подменю пользователя
сообщение 29.12.15, 19:33
Сообщение #4

Крутой
Иконка группы
Группа: Местный
Сообщений: 1760
Из: Проскуров
Спасибо сказали: 415 раз
Рейтинг: 408.7

Цитата(rpervak @ 29.12.15, 16:11) *
ТабДок = Новый ТабличныйДокумент;
    Макет  = ПолучитьМакет("Макет");
    
    ОбластьШапка              = Макет.ПолучитьОбласть("Шапка");
    ОбластьОплата             = Макет.ПолучитьОбласть("Оплата");
    ОбластьПоступление        = Макет.ПолучитьОбласть("Отгрузка");
    ОбластьПоступлениеКрасная = Макет.ПолучитьОбласть("ОтгрузкаКрасная");
    
    ОбластьДолг               = Макет.ПолучитьОбласть("Долг");
    ОбластьДолгПоДокументу    = Макет.ПолучитьОбласть("ДолгПоДокументу");
    
    ОбластьДолгПоПоступлению  = Макет.ПолучитьОбласть("ДолгПоПоступлению");

Перенести до начала цикла
Цитата(rpervak @ 29.12.15, 16:11) *
    ТабДок.ТолькоПросмотр = Истина;        
    ТабДок.Показать();   

Вынести за КонецЦикла

При этом желательно вставить какой-либо разделитель в конце ОбластьДолг

Спасибо сказали: rpervak,

rpervak Подменю пользователя
сообщение 30.12.15, 11:20
Сообщение #5

Говорящий
***
Группа: Пользователи
Сообщений: 72
Спасибо сказали: 2 раз
Рейтинг: 0

Спасибо ! Все получилось.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.18, 13:56
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!

Курсы валют: доллар США к гривне Курсы валют: евро к гривне Курсы валют: российский рубль к гривне