Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=67657)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ ПовторятьПриПечатиСтроки - не меняется параметр

Автор: Prana 25.10.24, 11:49

Здравствуйте!

Помогите пожалуйста понять...

Самописный отчёт. Вывожу таблицу значений в табличный документ через макет. Набор областей таков:

Шапка
ШапкаТаблицы
ТекущаяУлица
СтрокаТаблицы


На каждой странице повторяю ШапкаТаблицы. И сразу под шапкой ТекущаяУлица, для того чтобы в каждой строке не выводить улицу, чтобы не повторять в каждой строке одну и ту же улицу. Также ТекущаяУлица выводится когда по списку начинается другая улица. В цикле вывода СтрокаТаблицы при начале каждой итерации обновляю параметр отвечающий за значение параметра в области ТекущаяУлица текущей улицей из списка.


Так вот, проблема в том, что когда через конструкцию

ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область(4,,5,); // 4 - ШапкаТаблицы, 5 - ТекущаяУлица


то програмное изменение параметра отвечающего за значение в ТекущаяУлица не приводит к изменению. А повторяется только то, что было установлено в параметр перед конструкцией выше.

Как же это обойти ?


Автор: andrew76 25.10.24, 15:06

Prana @ Сегодня, 14:49 * ,

Здравствуйте.
Маловато кода для анализа.

Автор: Prana 25.10.24, 15:47

Цитата(andrew76 @ 25.10.24, 16:06) *
Здравствуйте.
Маловато кода для анализа.

Спасибо!
На данный момент код немного изменён, но всё равно нужный эффект не достигнут

&НаСервере
Процедура ВывестиНаПечать(ТабДок)
    
    ТабДОк.Очистить();
    
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабДок.РазмерСтраницы= "A4";
    ТабДок.АвтоМасштаб=Истина;                              
    
    
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьШапкаТаб = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьУлицаТаб = Макет.ПолучитьОбласть("УлицаВТаблице");
    ОбластьСтрокаТаб = Макет.ПолучитьОбласть("СтрокаТаблицы");
    
    
    ОбластьШапка.Параметры.ТекущаяДата = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy");
    ОбластьШапка.Параметры.Период = ""+Формат(Объект.Период.ДатаНачала,"ДФ=dd.MM.yyyy")+" - "+Формат(Объект.Период.ДатаОкончания,"ДФ=dd.MM.yyyy");
    ТабДок.Вывести(ОбластьШапка);
    
        
    ПовторятьПриПечатиОбласть = ТабДок.Вывести(ОбластьШапкаТаб);
    ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиОбласть;
    
        
    ЭтаУлица="";
    
    сч=0;
    Для Каждого Стр ИЗ ТЗ Цикл
        //ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область(5,,5,);

        Уличка=""+НасПункт+", "+лев(Стр.ТипУлицы,3)+". "+Стр.Улица;
        ОбластьУлицаТаб.Параметры.НасПунктУлица = Уличка;
        ОбластьШапкаТаб.Параметры.НасПунктУлица = Уличка;
               
        Если ЭтаУлица<>Стр.КодУлицы  Тогда                                                        
                        
                        
            ТабДок.Вывести(ОбластьУлицаТаб);
                                    
        КонецЕсли;
                
        ОбластьСтрокаТаб.Параметры.ЛС = Стр.ЛС;        
        ОбластьСтрокаТаб.Параметры.Договор = Стр.Договор;
        ОбластьСтрокаТаб.Параметры.ФИОВладельца = ПреобразоватьФИОВИнициалы(Стр.ВладелецЛС);
        
        ЭтаУлица =  Стр.КодУлицы;
        ТабДок.Вывести(ОбластьСтрокаТаб);
                
                
    КонецЦикла;  
        
КонецПроцедуры


Макет
https://pro1c.org.ua/redirect.php?https://ibb.co/PwzgRr6


Автор: andrew76 25.10.24, 15:57

Prana @ Сегодня, 18:47 * ,

Вот тут проблема ?

Если ЭтаУлица<>Стр.КодУлицы  Тогда                                                        
                        
       ТабДок.Вывести(ОбластьУлицаТаб);
                                    
КонецЕсли;


а если вот так ?

Если ЭтаУлица<>Стр.КодУлицы  Тогда                                                        
    
           ОбластьУлицаТаб.Параметры.НасПунктУлица = Уличка;                     
       ТабДок.Вывести(ОбластьУлицаТаб);
                                    
КонецЕсли;

Автор: Prana 25.10.24, 16:29

Цитата(andrew76 @ 25.10.24, 16:57) *


ТабДок.Вывести(ОбластьУлицаТаб);

нужно чтобы вот это выводилось под шапкой таблицы на каждой странице.

Автор: andrew76 25.10.24, 17:13

Цитата(Prana @ 25.10.24, 14:49) *
то програмное изменение параметра отвечающего за значение в ТекущаяУлица не приводит к изменению. А повторяется только то, что было установлено в параметр перед конструкцией выше.


так получается , что выводится не совсем то что надо ?
в отладчике какое значение переменных "Уличка" и "ЭтаУлица" в блоке вывода ?

Автор: Prana 25.10.24, 19:39

andrew76 @ Сегодня, 18:13 * ,
Да, текущая по циклу улица не выводится под шапкой на каждой странице.
УЛичка и ЭтаУлица штатно принимают значения согласно условий при каждой итерации.

Тут какая-та особенность метода ПовторятьПриПечатиСтроки...



Prana @ Сегодня, 20:26 * ,

поборол!

в этом месте

ТабДок.Вывести(ОбластьСтрокаТаб);


сдедал так

ТабДок.Вывести(ОбластьСтрокаТаб);

Если НЕ ТабДок.ПроверитьВывод(ОбластьСтрокаТаб)  Тогда
    ТабДок.Вывести(ОбластьУлицаТаб);
КонецЕсли;



щас проверяю все ли строки на месте...

Автор: Prana 25.10.24, 21:08

Да, всё на месте. Колхоз, конечно, но работает.

andrew76, спасибо вам!

Автор: andrew76 26.10.24, 4:12

Prana @ Сегодня, 0:08 * ,

Ну вот и хорошо.а на форуме (для спасибо) есть кнопка "c пальцем". smile.gif

Автор: Prana 26.10.24, 11:07

andrew76 @ Сегодня, 5:12 * ,
есть

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua