[РЕШЕНО] Программное объединение ячеек в скд

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем NewLife89, 9 дек 2014.

  1. TopicStarter Overlay
    NewLife89
    Offline

    NewLife89 Опытный в 1С

    Регистрация:
    4 дек 2014
    Сообщения:
    63
    Симпатии:
    1
    Баллы:
    29
    Добрый всем день, подскажите как объединить выводимые колонки.
    Пишем в процедуре ПриКомпоновкеРезультата, а что не нашел(
    Подскажите пожалуйста как быть, может есть пример?(
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Полностью две колонки, или только определенные строки в колонках?
  3. TopicStarter Overlay
    NewLife89
    Offline

    NewLife89 Опытный в 1С

    Регистрация:
    4 дек 2014
    Сообщения:
    63
    Симпатии:
    1
    Баллы:
    29
    только определенные колонки
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    ?
    Еще раз: две определенные колонки полностью, или в данных двух определенных колонках только какие-то отдельные строки (ячейки)?
  5. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Приведите пример. может это можно и не программоно сделать. СКД можно группировки для реквизитов сделать и потом эти группировки уже указывать выводить вместе или нет.

    Ну если программно то все равно через это же делать. Либо этим колонкам пути менять, делая одинакового родителя и потом что реквизиты вместе с владельцами.
    Был бы пример было бы более понятно
  6. TopicStarter Overlay
    NewLife89
    Offline

    NewLife89 Опытный в 1С

    Регистрация:
    4 дек 2014
    Сообщения:
    63
    Симпатии:
    1
    Баллы:
    29
    Яблоко 2 красный
    яблоко 3 зеленый
    Яблоко 2 желтый


    красный
    яблоко желтый 7
    зеленый

    как то так, чтобы яблоки ячейка раздвинулась на все цвета и кол-во тоже.
  7. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Ну тут у вас формат сдвинулся не видно.
    Картинку скрин экселя прикрепите, но если я правильно понял, то можно это и ччерез собственное оформление макета сделать
  8. TopicStarter Overlay
    NewLife89
    Offline

    NewLife89 Опытный в 1С

    Регистрация:
    4 дек 2014
    Сообщения:
    63
    Симпатии:
    1
    Баллы:
    29
    Хочу вот так задать программно

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      14,3 КБ
      Просмотров:
      25
  9. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Какя платформа? на 3 3 у группировки есть в других настройках Тип Макета - Так вот у вас по сути дела 2 группировки Номеклатура и Цвет. у Цвета надо поставить тип- Вертикально. и Авто позиция ресурсов поменять, что бы они выводились после номенклатуры
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Чет, я у себя попробовал, что что выше Вам написал. с ходу не получилось. и через вложенную схему то же. Т.к скорее всего цвет это характеристика, а соответвенно и измерение.
    Ну я попробую еще .
    Если Вариант именно такой как у Вас. то если быстро, то я бы предложил. Взять СКД там все настроить, а затем в коде получить результат компановщика, и уже этот результат выводить в обычный таб документ и строить и объединять так как Вам необходимо.
  11. TopicStarter Overlay
    NewLife89
    Offline

    NewLife89 Опытный в 1С

    Регистрация:
    4 дек 2014
    Сообщения:
    63
    Симпатии:
    1
    Баллы:
    29
    Подскажите как программно объединить?! Должно же быть объединение при компоновке!
  12. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Смотрите компановка занимается выводом сама. Вы по суте можете управлять программно структурой компановки, все что вы делаете в пользовательском или программном режиме - это можно повторить кодом. Тот момент когда оно вывело одно поле, затем второе, и третье, причем это все в одной группировке и это надо объеденить, она вам не даст, ну может и даст (я не встречал такого). За вывод отвечает ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент. - там таких методов как Объеденить я не видел, может Вы найдете
    В таких случаях как у вас тут либо как я Вам написал. либо уже пробовать в СКД свой макет оформления делать и через него выводить
    NewLife89 нравится это.
  13. TopicStarter Overlay
    NewLife89
    Offline

    NewLife89 Опытный в 1С

    Регистрация:
    4 дек 2014
    Сообщения:
    63
    Симпатии:
    1
    Баллы:
    29
    Нашел вот такой метод

    Область = ТабДок.Область(2,2,3,3);
    Область.Объединить();

    Как пройтись по моим группировкам в цикле и объединить колонки?
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Ну это метод табличного документа не компановки.
    Вот по этому я Вам и писал, что можете получить результат компановки а потом ей заполнять табличный документ, и уже внем объеденять ячейки, которые вам нужно.
    Ну тут просто Вам надо запоминать начало строки, конец строки, начало колонки и конец колонки и объеденять потом

    Ну типа у Вас есть результат вида

    Яблоко 2 красный
    Яблоко 2 желтый
    Яблоко 2 зеленый
    яблоко 3 зеленый
    Яблоко 3 желтый

    В цикле начинаете выводить

    и проверяете на то что номенклатура поменялась. ка ктолько поменялась - предыдущие области объеденили. причем колонки запоминать нет смысла они у вас всегда остаются на месте

    Ну т.е
    запомнили на певом входе номер строки 1

    бац номеклатура поменялась счетчик уже на 3 и делаете
    Область = ТабДок.Область(1,3,1,1);
    Область.Объединить(); //это яблоки объеденили

    Область = ТабДок.Область(1,3,2,2);
    Область.Объединить(); //это итоги объеденили, ну тут еще параметр заново присвоить.

    Ну и т.д только первые две цифры ТабДок.Область(а,б,2,2); это будут счетчики у Ввас
    NewLife89 нравится это.
  15. TopicStarter Overlay
    NewLife89
    Offline

    NewLife89 Опытный в 1С

    Регистрация:
    4 дек 2014
    Сообщения:
    63
    Симпатии:
    1
    Баллы:
    29
    Прошу прощения за тупость, но есть ли пример самого цикла.
  16. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Писал на коленке, что то типа этого

    Код:
        ТабДок= Новый ТабличныйДокумент;
        Запрос=Новый Запрос;
        Запрос.Текст="";
        Выборка=Запрос.Выполнить().Выбрать();
       
       
        ПредыдущаяНоменклатура=Справочники.Номенклатура.ПустаяСсылка();
       
        ЭтоПервыйВход=Истина;
        СтрокаНач=1;
        СтрокаКон=1;
       
        Пока Выборка.Следующий()Цикл
           
            Если Выборка.Номенклатура<>ПредыдущаяНоменклатура тогда
                Если ЭтоПервыйВход Тогда
                    СтрокаКон=СтрокаКон+1;
                    ТабДок.Вывести(ОбластьДанных);
                    ЭтоПервыйВход=Ложь;
                Иначе
                    Область = ТабДок.Область(СтрокаНач,СтрокаКон,1,1);
                    Область.Объединить();
                    Область = ТабДок.Область(СтрокаНач,СтрокаКон,2,2);
                    Область.Объединить();
                    СтрокаНач=СтрокаКон+1;
                    СтрокаКон=СтрокаКон+1;
                    ТабДок.Вывести(ОбластьДанных);
                Конецесли;   
               
            Иначе
                 СтрокаКон=СтрокаКон+1;
                 ТабДок.Вывести(ОбластьДанных);
            КонецЕсли;   
           
        КонецЦикла;
    NewLife89 нравится это.
  17. KrivosheevEV
    Offline

    KrivosheevEV Новичок в 1С

    Регистрация:
    3 мар 2014
    Сообщения:
    35
    Симпатии:
    2
    Баллы:
    4
    Может быть, есть смысл сделать в СКД нечто похожее:

    [-] Яблоко 6
    зелёный 1
    красный 2
    жёлтый 3​

    Делается не сложно, код не нужен.
  18. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Я думаю, если бы человеку нужно было имено так - поста бы не было. Там разных вариантов то куча, идет раговор именно про такой.
    А Вы сейчас на вопрос "Где взять мерседес за миллион" - отвечаете "А нифиг Вам мерседес - может Вам Пассат подойдет"
    NewLife89 нравится это.
  19. KrivosheevEV
    Offline

    KrivosheevEV Новичок в 1С

    Регистрация:
    3 мар 2014
    Сообщения:
    35
    Симпатии:
    2
    Баллы:
    4
    Не все пожелания пользователей можно/нужно выполнять. И, продолжая ассоциации про машины: Есть ли смысл брать машину в кредит на 2 дня (а, может и более), если можно обойтись приобретением автомобиля, кредит за который можно выплатить за 2-4 часа?
  20. TopicStarter Overlay
    NewLife89
    Offline

    NewLife89 Опытный в 1С

    Регистрация:
    4 дек 2014
    Сообщения:
    63
    Симпатии:
    1
    Баллы:
    29
    Что то ничего не получается =( Объединяются соседние, а не весь список...
    То есть тупо по две...
    &НаКлиенте
    Процедура Объединить(Команда)
    ОбъединитьНаСервере();
    КонецПроцедуры

    &НаСервере
    Процедура ОбъединитьНаСервере()




    Для к = 2 по Результат.ВысотаТаблицы - 1 цикл
    Если Результат.Область(к,1,к,1).Текст = Результат.Область(к-1,1,к-1,1).Текст Тогда
    ОбластьОбъединения = Результат.Область(к-1,1,к,1);
    ОбластьОбъединения.Объединить();
    КонецЕсли;
    КонецЦикла;


    КонецПроцедуры

Поделиться этой страницей