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

Объединение строк

Автор BlackWolf, 10 мая 2017, 15:52

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

BlackWolf

Всем привет. Пытаюсь объединить одинаковые строки в столбце следующим образом:

    ЗакП=1;
    НН=0;
    Строк=5;
    Для каждого Строчка Из ЭтотОбъект.Товары Цикл
        Если ЗакП=Строчка.ЗаказПокупателя.Номер Тогда
            НН=НН+1;
                Область.Параметры.Номер     = Строчка.НомерСтроки;
        Область.Параметры.ЗаказПокупателя   = Строчка.ЗаказПокупателя.Номер;
        Область.Параметры.Контрагент     = Строчка.Контрагент;
        Область.Параметры.Адрес             = Строчка.АдресДоставки;
        Область.Параметры.Номенклатура      = Строчка.Номенклатура;
               
                ТабДок.Область("R"+Строк+"C2:R"+(Строк-НН)+"C2").Объединить();
         Иначе
            НН=0;       
            Область.Параметры.Номер = Строчка.НомерСтроки;
            Область.Параметры.ЗаказПокупателя = Строчка.ЗаказПокупателя.Номер;
            Область.Параметры.Контрагент = Строчка.Контрагент;
            Область.Параметры.Адрес             = Строчка.АдресДоставки;
            Область.Параметры.Номенклатура      = Строчка.Номенклатура;
       КонецЕсли;
          Строк=Строк+1;
          ЗакП=Строчка.ЗаказПокупателя.Номер;     
        Область.ТекущаяОбласть.Шрифт = ЖирныйШрифт;
ТабДок.Вывести(Область);
КонецЦикла;

Объединение происходит, но как-то странно, при новом Заказе Покупателя объединяет последнюю строку предыдущего заказа с новым. Хотя в логике ошибок не нахожу, что может быть?

ilyay

Попробуйте получать область внутри цикла.

BlackWolf

Цитата: ilyay от 10 мая 2017, 17:44
Попробуйте получать область внутри цикла.
Не помогло, я так понимаю не корректно отрабатывается первое условие, потому-что когда делаю захват от заголовка он и заголовок объединяет.

ilyay

Если не получается, тогда переделайте алгоритм: выводите строки, запоминая диапазоны для каждого заказа, а потом объедините ячейки по диапазонам.

ilnur75

Цитата: BlackWolf от 10 мая 2017, 15:52Пытаюсь объединить одинаковые строки в столбце
на упр.форме Предприятие 8.3
может Вам поможет. В качестве примера взял таб часть Товары документа, создал печатную форму.
В таб части документа для проверки работы заполнил строки с одинаковыми наименованиями, но разным количеством.
в модуле менеджера в проц.Печать сделал запрос к таб.части и указал условия группировки по номенклатуре и остальным колонкам таб.части.
В итоге в документе есть строки с одинаковыми наименованиями, а в печатной форме они уже группируются и выводятся одной строкой.




BlackWolf

Цитата: ilyay от 11 мая 2017, 10:23
Если не получается, тогда переделайте алгоритм: выводите строки, запоминая диапазоны для каждого заказа, а потом объедините ячейки по диапазонам.
Спасибо за подсказку, сделал вот так:
    ЗакП=1;
    НН=0;
    ОО=0;
Строк=5;
    Соответствие = Новый Соответствие;
    Для каждого Строчка Из ЭтотОбъект.Товары Цикл
        Если НЕ (ЗакП=Строка(Строчка.ЗаказПокупателя.Номер)) Тогда
            Если НН>1 Тогда
              Если ОО>1 ИЛИ ОО=1 Тогда
                ОО=ОО+1;
                Соответствие.Вставить("А"+ОО,НН); 
              Иначе
                ОО=1;
                Соответствие.Вставить("А"+ОО,НН);
              КонецЕсли; 
            КонецЕсли;
            НН=1;
            Область.Параметры.Номер     = Строчка.НомерСтроки;
            Область.Параметры.ЗаказПокупателя = Строчка.ЗаказПокупателя.Номер;
            Область.Параметры.Контрагент     = Строчка.Контрагент;
            Область.Параметры.Адрес             = Строчка.АдресДоставки;
            Область.Параметры.Номенклатура      = Строчка.Номенклатура;
        Иначе 
            НН=НН+1;
                Область.Параметры.Номер     = Строчка.НомерСтроки;
        Область.Параметры.ЗаказПокупателя = Строчка.ЗаказПокупателя.Номер;
        Область.Параметры.Контрагент     = Строчка.Контрагент;
        Область.Параметры.Адрес             = Строчка.АдресДоставки;
        Область.Параметры.Номенклатура      = Строчка.Номенклатура;   
         КонецЕсли;
        Строк=Строк+1;
        ЗакП=Строка(Строчка.ЗаказПокупателя.Номер);     
        Область.ТекущаяОбласть.Шрифт = ЖирныйШрифт;
ТабДок.Вывести(Область);
    КонецЦикла;
    Для Счетчик = 1 По ОО Цикл
       Если Счетчик=1 Тогда
          Значение = Соответствие["А"+Счетчик]+4;
          ТабДок.Область("R5C2:R"+Значение+"C2").Объединить();
          Значение2=0;
       ИначеЕсли Значение2=0 Тогда
            Значение3 = Соответствие["А"+Счетчик]+Значение;
            Значение2 = Значение3;
            Значение4 = Значение+1;
            ТабДок.Область("R"+Значение4+"C2:R"+Значение2+"C2").Объединить();
       Иначе
            Значение3 = Соответствие["А"+Счетчик]+Значение2;
            Значение4 = Значение2+1;
            Значение2 = Значение3;
            ТабДок.Область("R"+Значение4+"C2:R"+Значение2+"C2").Объединить();
        КонецЕсли;
    КонецЦикла;

Но вот беда последний цикл не хочет объединять, а так всё отлично отрабатывает.



Добавлено: 12 мая 2017, 13:30


Цитата: ilnur75 от 11 мая 2017, 18:19
Цитата: BlackWolf от 10 мая 2017, 15:52Пытаюсь объединить одинаковые строки в столбце
на упр.форме Предприятие 8.3
может Вам поможет. В качестве примера взял таб часть Товары документа, создал печатную форму.
В таб части документа для проверки работы заполнил строки с одинаковыми наименованиями, но разным количеством.
в модуле менеджера в проц.Печать сделал запрос к таб.части и указал условия группировки по номенклатуре и остальным колонкам таб.части.
В итоге в документе есть строки с одинаковыми наименованиями, а в печатной форме они уже группируются и выводятся одной строкой.
Спасибо! Попробую как будет время, а сейчас хотелось бы свой вариант наконец допилить)

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск